Schleife für viele Dateien
Schleife für viele Dateien
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
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
Hallo Student_L,
willkommen im Forum!
Diesen Teil müsstest Du in eine Funktion packen, die als Argument einen Dateinamen aufnimmt:
Den Rest macht dann lapply():
Gruß, Jörg
willkommen im Forum!
Kannst Du uns grob zeigen, wie das momentan aussieht?
Diesen Teil müsstest Du in eine Funktion packen, die als Argument einen Dateinamen aufnimmt:
Code: Alles auswählen
myAnalyse <- function(Datei) {
...
}
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")
Code: Alles auswählen
lapply(Dateien, FUN=myAnalyse)
jaAußerdem hatte ich mir vorgestellt, dass sich die Benennung der Graphen der jeweiligen Datei anpasst. Ist das zu realisieren?
Gruß, Jörg
Re: Schleife für viele Dateien
Vielen Dank,
das hat mir schon weiter geholfen.
das hat mir schon weiter geholfen.
Re: Schleife für viele Dateien
Scheinbar habe ich das mit der Schleife doch nicht verstanden.
Hier eine gekürzte Variante meines Codes.
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ß
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")
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
Hallo Student_L,
bei mir sieht das momentan so aus:
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
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
Ü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
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ß
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
Hallo Student_L,
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.
- So lassen sich später Fehler einfacher finden und die Funktionen können einfacher wiederverwendet werden.
Gruß, Jörg
prima
ja, eventuell auch mapply()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).
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.
kleinere Funktionen sind besser - so dass man deren Aufgabe gut überschauen kann.Hast du Erfahrungswerte, ob es geschickter ist eine große Funktion mit vielen Befehlen laufen zu lassen
oder besser viele kleinere Funktionen?
- 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
Super vielen Dank.