Schreiben Sie eine targets Pipeline, die einen Ordner mit Datendateien beobachtet und sich aktualisiert, wenn neue Daten dazukommt. Die Pipeline soll die Datendateien importieren und zu einer Tabelle zusammenfügen und schließlich die Zeilen zählen.
Lösung
Die folgende Lösung ist stark inspiriert von diesem SO-Post.
Wir scheiben eine _targets.R Datei mit folgendem Inhalt.
Zuerst das Setup:
library(targets)library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.3 ✔ readr 2.1.4
✔ forcats 1.0.0 ✔ stringr 1.5.0
✔ ggplot2 3.4.4 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.0
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tarchetypes) # für tar_files()
Dann definieren wir Konstanten; hier den Pfad:
path <-list()path$data <-"data/"
Aus Gründen der Ordnungsfreude haben wir eine Liste erstellt, in der dann alle möglichen Pfade abgelegt werden können.
Schließlich definieren wir die Pipeline. Hier spielt die Musik:
list(tar_files(data_paths, path$data %>%list.files(full.names =TRUE, pattern ="csv")), # Liste der Daten-Dateientar_target(data_proc, data_paths %>%read_csv(), # Einlesenpattern =map(data_paths)), # Über alle Elemente von data_paths iterieren, also über alle Datendateientar_target(n_row, nrow(data_proc)) # Zeilen zählen)
---exname: targets-multiple-data-filesexpoints: 1extype: stringexsolution: NAcategories:- projectmgt- targets- repro- stringdate: '2023-05-23'slug: targets-multiple-data-filestitle: targets-multiple-data-files---# AufgabeSchreiben Sie eine `targets` Pipeline, die einen Ordner mit Datendateien beobachtet und sich aktualisiert, wenn neue Daten dazukommt. Die Pipeline soll die Datendateien importieren und zu einer Tabelle zusammenfügen und schließlich die Zeilen zählen.</br></br></br></br></br></br></br></br></br></br># LösungDie folgende Lösung ist stark inspiriert von [diesem SO-Post](https://stackoverflow.com/questions/69652540/how-should-i-use-targets-when-i-have-multiple-data-files).Wir scheiben eine `_targets.R` Datei mit folgendem Inhalt.Zuerst das Setup:```{r}library(targets)library(tidyverse)library(tarchetypes) # für tar_files()```Dann definieren wir Konstanten; hier den Pfad:```{r}path <-list()path$data <-"data/"```Aus Gründen der Ordnungsfreude haben wir eine Liste erstellt, in der dann alle möglichen Pfade abgelegt werden können.Schließlich definieren wir die Pipeline. Hier spielt die Musik:```{r}list(tar_files(data_paths, path$data %>%list.files(full.names =TRUE, pattern ="csv")), # Liste der Daten-Dateientar_target(data_proc, data_paths %>%read_csv(), # Einlesenpattern =map(data_paths)), # Über alle Elemente von data_paths iterieren, also über alle Datendateientar_target(n_row, nrow(data_proc)) # Zeilen zählen)```Mit `pattern = map(data_paths)` iterieren wir nicht nur über alle Elemente von `data_path`,sondern fügen die Elemente auch zu einer Tabelle zusammen.Hier ist die ganze Syntax noch einmal:```{r}# _targets.R filelibrary(targets)library(tidyverse)library(tarchetypes)path <-list()path$data <-"data/"list(tar_files(data_paths, path$data %>%list.files(full.names =TRUE, pattern ="csv")),tar_target(data_proc, data_paths %>%read_csv(),pattern =map(data_paths)),tar_target(n_row, nrow(data_proc)))```---Categories: - projectmgt- targets- repro- string