Iteratives Einlesen von Datensätzen aus einem Verzeichnis

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
Regression
Beiträge: 76
Registriert: Mo Jan 15, 2018 9:57 am

Iteratives Einlesen von Datensätzen aus einem Verzeichnis

Beitrag von Regression »

Hallo Zusammen,

Habe eine Verzeichnis mit über 100 Tabellen(Datensetzen).
ich habe eine Funktion geschrieben (evaluate_data(DataName)), die mir ein Datensatz (also das DataName) berechnet.
Nun möchte ich nicht die Funktion über 100 mal aufrufen und die Ergebnisse manuell in einer Tabelle speichern.
Besteht die Möglichkeit eine for- Schleife zu schreiben, die die Daten aus einem Verzeichnis einliest?
Ich könnte mir vorstellen, dass man eine zusätzliche Liste benötigt die die Namen der Datensätze beinhaltet.
aber wie geht man dann vor ?
Ich hab an sowas gedacht wie:

Code: Alles auswählen

 for (i in 1:length(DataList)) {
    Main.Data<- Data[i]
    read.csv2()
  }
wie übergibt man den Namen der Datei in den Pfand?

Oder gibt es eventuell eine elegantere Lösung?
Besten Dank für eure Antworten im Voraus!!!!
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Itereives Einlesen von Datensätzen aus einem Verzeichnis

Beitrag von bigben »

Hallo!

Zunäcsht einmal kannst Du mit den Funktionen dir und list.files einen Vektor mit den Dateien in einem bestimmten Ordner einlesen. Das dürfte schon mal hilfreich sein. Siehe auch

Code: Alles auswählen

help(list.files)
Eine for Schleife in R kann mehr als eine for Schleife in C. Wenn Du schreibst

Code: Alles auswählen

for (i in 1:length(DataList)) 
dann durchläuft i der Reihe nach die Zahlen in dem Vektor `1:length(DataList)`. Stattdessen kannst Du i auch über einen Vektor mit Namen laufen lassen.

Code: Alles auswählen

namen <- c("albert.csv", "berta.csv", "caesar.csv", "doerte.csv", "emil.csv")
for (name in namen){
    print(name)
}
Kannst Du damit schon was anfangen? Anstelle des print müsstest Du natürlich bei Dir ein read.csv setzen und Dir überlegen, wie Du Dir die Ergebnisse nach jedem Schleifendurchlauf merkst, damit sie nicht jedes Mal überschrieben werden.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Itereives Einlesen von Datensätzen aus einem Verzeichnis

Beitrag von EDi »

Ich würde mit lapply() über die Dateipfade laufen. Vorteil ist dass man danach alles in einer Liste hat, von der man dann weiterarbeiten kann (z. b. do.call(rbind, <list>)).
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Regression
Beiträge: 76
Registriert: Mo Jan 15, 2018 9:57 am

Re: Itereives Einlesen von Datensätzen aus einem Verzeichnis

Beitrag von Regression »

Das ist schon mal ein Ansatz, besten Dank!
Probiere heute Nachmittag aus.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Itereives Einlesen von Datensätzen aus einem Verzeichnis

Beitrag von jogo »

Hallo Regression,

hier wurde schon mal etwas strukturell Ähnliches (bezüglich des Ablaufes) beschrieben:
viewtopic.php?f=7&t=568&p=2317&hilit=lapply#p2307

Gruß, Jörg
Regression
Beiträge: 76
Registriert: Mo Jan 15, 2018 9:57 am

Re: Itereives Einlesen von Datensätzen aus einem Verzeichnis

Beitrag von Regression »

Vielen Dank für den Tipp mit list.files, das hat wunderbar funktioniert.
Nun stehe ich aber immer noch vor der Frage wie ich ein i-tes Element aus der Liste in den Pfad übergebe, etwas konkreter:
mit

Code: Alles auswählen

myList<-list.files(path="~/myPath")
erhalte ich nun die gewünschte Liste.
nun möchte ich diese liste der Reihe nach bearbeiten, dazu müsste ich diese erst einlesen lassen, aber wie?

Code: Alles auswählen

fileName<-read.csv("~/myPath/fileName", header=FALSE)
so soll es ja eigentlich aussehen, aber ich habe ja nur myList statt fileName zur Verfügung.
Sprich wenn ich

Code: Alles auswählen

fileName<-read.csv("~/myPath/myList[i]", header=FALSE)
wird selbstverständlich nach dem Filenamen "myList" und nicht nach dem Inhalt von myList an der Stelle i gesucht.

Ist es verständlich was ich meine?
Regression
Beiträge: 76
Registriert: Mo Jan 15, 2018 9:57 am

Re: Itereives Einlesen von Datensätzen aus einem Verzeichnis

Beitrag von Regression »

jogo hat geschrieben: Di Feb 06, 2018 9:34 am Hallo Regression,

hier wurde schon mal etwas strukturell Ähnliches (bezüglich des Ablaufes) beschrieben:
viewtopic.php?f=7&t=568&p=2317&hilit=lapply#p2307

Gruß, Jörg
Oh das habe ich spät gelesen... es beschreibt genau mein Anliegen, besten Dank, hat alles geklappt!
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Iteratives Einlesen von Datensätzen aus einem Verzeichnis

Beitrag von jogo »

Hier noch etwas zu diesem Thema bei StackOverflow
https://stackoverflow.com/questions/114 ... les-into-r

Gruß, Jörg
Antworten