2016-06-02 1 views
0

Ich wollte eine Schleife schreiben, um TXT-Dateien aus verschiedenen Ordnern in RData-Format zu konvertieren. Die Dateien haben denselben Namen, also wollte ich sie bedingt umbenennen und in einem Ordner speichern. Die Schleife erledigt den Job, speichert jedoch den gleichen Namen des Datenrahmens für alle Dateien. Gibt es einen besseren Weg, dies zu tun?Konvertieren in RData-Format in einer Schleife mit verschiedenen Datenframe-Namen

for (i in (sprintf("%02d", (seq(from=8, to=15))))) { 
    for (j in 1:4){ 
    load <- paste0("C:/Users/User/Desktop/data/20", i, "/20", i, ".", j, "kw/data.txt") 
    save <- paste0("data.20", i, ".", j, "kw") 
    save <- read.table(load, sep="|", header=T) 
    save(save, file=paste0("./data-r/data.20", i, ".", j, "kw.RData")) 
    }} 
+0

Ich tat, es war ein Tippfehler. Verschiedene Dateien werden jedes Mal gelesen, das Problem ist der Name von df ... – Mateusz

+1

Sie erleben die nicht standardmäßige Auswertung bei der Arbeit in 'save()'. Der Name des df wird durch den Namen des zu speichernden Objekts angegeben, das in jeder Iteration dieser Schleife gleich 'save' ist. Sie könnten stattdessen 'saveRDS()' verwenden oder auf das zweite und nicht das erste Argument von 'save()' umschalten, um den zu speichernden Datenrahmen anzugeben. – Thomas

Antwort

0

Ich denke, die folgende Anpassung Ihres Codes sollte den Trick tun.

for (i in (sprintf("%02d", (seq(from=8, to=15))))) { 
    for (j in 1:4){ 
    load <- paste0("C:/Users/User/Desktop/data/20", i, "/20", i, ".", j, "kw/data.txt") 
    save <- paste0("data.20", i, ".", j, "kw") 
    assign(x = save, 
      value = read.table(load, sep="|", header=T)) 
    eval(bquote(
     save(.(as.name(save)), 
      file=paste0("./data-r/data.20", i, ".", j, "kw.RData")) 
    )) 
    eval(bquote(rm(.(as.name(save))))) 
    }} 

Die assign -Funktion sorgt dafür, dass der Inhalt der Datei auf den aktuellen Wert Ihrer save -Objekt zugeordnet ist.

Die eval + bquote + .() + as.name Konstruktion wird verwendet, um einen Anruf zu erstellen (und bewerten) an die save -function, so dass es nicht Ihre save -object nicht speichert, sondern speichern Sie das Objekt, dessen Name gespeichert in save.

Die Verwendung von rm am Ende ist enthalten, um zu vermeiden, dass Ihr Arbeitsbereich (und der Arbeitsspeicher) mit dem Inhalt aus den Dateien überladen wird.

Verwandte Themen