Seite 1 von 1
Schleife für viele Dateien
Verfasst: Di Mai 19, 2020 1:53 pm
von Student_L
Hallo,
ich bin ein kompletter R Neuling und deshalb etwas ratlos, wie ich mit Schleifen arbeite.
Folgende Situation:
Ich mache eine Zeitreihen Analyse. Die Analyse mit einer Datei funktioniert soweit.
Nun möchte ich das selbe Spiel für die restlichen fast 200 Dateien (alle csv) durchführen.
Wie kann ich alle Dateien einladen und eine Schleife einbauen?
Außerdem hatte ich mir vorgestellt, dass sich die Benennung der Graphen der jeweiligen Datei anpasst. Ist das zu realisieren?
Vielen Dank im Voraus
Re: Schleife für viele Dateien
Verfasst: Di Mai 19, 2020 2:54 pm
von jogo
Hallo Student_L,
willkommen im Forum!
Student_L hat geschrieben: Di Mai 19, 2020 1:53 pm
ich bin ein kompletter R Neuling und deshalb etwas ratlos, wie ich mit Schleifen arbeite.
Folgende Situation:
Ich mache eine Zeitreihen Analyse. Die Analyse mit einer Datei funktioniert soweit.
Kannst Du uns grob zeigen, wie das momentan aussieht?
Diesen Teil müsstest Du in eine Funktion packen, die als Argument einen Dateinamen aufnimmt:
Nun möchte ich das selbe Spiel für die restlichen fast 200 Dateien (alle csv) durchführen.
Wie kann ich alle Dateien einladen und eine Schleife einbauen?
Code: Alles auswählen
# ... Arbeitsverzeichnis setzten
Dateien <- dir(pattern="*.csv")
Den Rest macht dann
lapply():
Außerdem hatte ich mir vorgestellt, dass sich die Benennung der Graphen der jeweiligen Datei anpasst. Ist das zu realisieren?
ja
Gruß, Jörg
Re: Schleife für viele Dateien
Verfasst: Di Mai 26, 2020 12:40 pm
von Student_L
Vielen Dank,
das hat mir schon weiter geholfen.

Re: Schleife für viele Dateien
Verfasst: Do Jun 04, 2020 7:05 pm
von Student_L
Scheinbar habe ich das mit der Schleife doch nicht verstanden.
Hier eine gekürzte Variante meines Codes.
Code: Alles auswählen
daten<-read.csv("C:/Users/Documents/Master/Projekt/data/AB_113.csv")
# Kürzen der Daten (ab 22.01.2007)
dat<-subset(daten,Date>="2007-01-22")
# umwandeln in Vektor
ze=dat$Date
gr=dat$GWL
# Zeitreihe
zr<-ts(gr,start=c(2007,4),end=c(2015,52),frequency=52)
plot.ts(zr,xlab="Zeit",ylab="y",main="Testreihe")
Wenn ich diesen mit der einzeln geladenen Datei ausführe (s.Code), gibt es keine Probleme.
Nun möchte ich den Code auf alle Dateien in diesem Ordner "data"anwenden.
Wie mache ich das?
Vielen Dank.
Gruß
Re: Schleife für viele Dateien
Verfasst: Do Jun 04, 2020 7:47 pm
von jogo
Hallo Student_L,
bei mir sieht das momentan so aus:
Code: Alles auswählen
setwd("C:/Users/Documents/Master/Projekt/data") # Arbeitsverzeichnis setzten
Dateien <- dir(pattern="*.csv")
auswert <- function(Datei) {
daten <- read.csv(Datei)
dat <- subset(daten, Date>="2007-01-22") # Kürzen der Daten (ab 22.01.2007)
list(ze=dat$Date, gr=dat$GWL, zr=ts(dat$GWL, start=c(2007,4), end=c(2015,52), frequency=52))
}
# erster Test:
L <- auswert("AB_113.csv")
plot.ts(L[[1]]$zr, xlab="Zeit", ylab="y", main="Testreihe")
L <- auswert(Dateien) ### alle Dateien
Den Grafik-Teil habe ich jetzt erstmal außen vor gelassen. Bei so vielen Grafiken musst Du Dir sowieso Gedanken machen, wie die Ausgabe geschehen soll.
Üblicherweise nimmt man für das Gesamtkunstwerk wieder lapply() und lässt es über die Liste L laufen mit einer kleinen Funktion, die den künstlerischen Teil ausführt.
Gruß, Jörg
Re: Schleife für viele Dateien
Verfasst: Mo Jun 08, 2020 11:16 am
von Student_L
Hallo Jörg,
vielen lieben Dank.
Jetzt läuft es bei mir
Mit den Graphiken funktioniert es dann in einer gesonderten Funktion und lappy() genau so?
Ich habe vor, diese einzeln zu speichern (wahrscheinlich in eine pdf oder als png).
Hast du Erfahrungswerte, ob es geschickter ist eine große Funktion mit vielen Befehlen laufen zu lassen
oder besser viele kleinere Funktionen?
Gruß
Re: Schleife für viele Dateien
Verfasst: Mo Jun 08, 2020 11:37 am
von jogo
Hallo Student_L,
Student_L hat geschrieben: Mo Jun 08, 2020 11:16 am
Jetzt läuft es bei mir
prima
Mit den Graphiken funktioniert es dann in einer gesonderten Funktion und lappy() genau so?
Ich habe vor, diese einzeln zu speichern (wahrscheinlich in eine pdf oder als png).
ja, eventuell auch mapply()
Je nachdem, was die Funktion machen soll, kann einem gelegentlich auch das Scoping im Wege stehen
- auch dafür gibt es Möglichkeiten in R, diese Schwierigkeiten zu überwinden, siehe
https://stackoverflow.com/a/62284197/5414452
Für meinen Geschmack ist das aber eine ziemlich große Brechstange, die man bei einer solchen Lösung verwendet.
Ich würde dann doch eher eine for-Schleife dafür nehmen. Dabei ist es aber besonders wichtig, dass der Code übersichtlich und klar strukturiert ist.
Hast du Erfahrungswerte, ob es geschickter ist eine große Funktion mit vielen Befehlen laufen zu lassen
oder besser viele kleinere Funktionen?
kleinere Funktionen sind besser - so dass man deren Aufgabe gut überschauen kann.
- So lassen sich später Fehler einfacher finden und die Funktionen können einfacher wiederverwendet werden.
Gruß, Jörg
Re: Schleife für viele Dateien
Verfasst: Mo Jun 08, 2020 11:58 am
von Student_L
Super vielen Dank.