Ich bin ziemlich neu bei R und ein bisschen fest auf, was ich fühle, ist wahrscheinlich eine häufige Operation zu tun. Ich habe eine Reihe von Dateien (57 mit ~ 1,5 Milliarden Zeilen kumulativ um 6 Spalten), auf denen ich grundlegende Funktionen ausführen muss. Ich bin in der Lage, diese Dateien zu lesen und die Berechnungen durchzuführen, ich brauche kein Problem, aber ich stolpere in der endgültigen Ausgabe. Ich stelle mir vor, dass die Funktion jeweils an einer Datei arbeitet, die bearbeitete Datei ausgibt und auf die nächste übergeht.Verwenden von Lapply, um eine Funktion über eingelesene Liste von Dateien anzuwenden und die Ausgabe als neue Liste von Dateien zu speichern
Nach den Berechnungen möchte ich 57 neue TXT-Dateien ausgeben, die nach der Datei benannt sind, aus der die Eingabedaten stammen. Bis jetzt bin ich in der Lage, die Berechnungen auf kleineren Testdatensätzen durchzuführen und 1 angehängte .txt Datei auszuspucken, aber das ist nicht, was ich als eine Endausgabe will.
#list filenames
files <- list.files(path=, pattern="*.txt", full.names=TRUE, recursive=FALSE)
#begin looping process
loop_output = lapply(files,
function(x) {
#Load 'x' file in
DF<- read.table(x, header = FALSE, sep= "\t")
#Call calculated height average a name
R_ref= 1647.038203
#Add column names to .las data
colnames(DF) <- c("X","Y","Z","I","A","FC")
#Calculate return
DF$R_calc <- (R_ref - DF$Z)/cos(DF$A*pi/180)
#Calculate intensity
DF$Ir_calc <- DF$I * (DF$R_calc^2/R_ref^2)
#Output new .txt with calcuated columns
write.table(DF, file=, row.names = FALSE, col.names = FALSE, append = TRUE,fileEncoding = "UTF-8")
})
Meine neuesten Code Bemühungen haben zu Chaos schon mit dem intial lapply/sapply Funktion als so:
#begin looping process
loop_output = sapply(names(files),
function(x) {
Neben der Ausgangsleitung:
#Output new .csv with calcuated columns
write.table(DF, file=paste0(names(DF), "txt", sep="."),
row.names = FALSE, col.names = FALSE, append = TRUE,fileEncoding = "UTF-8")
Von dem, was ich habe die Dateibenennungsfunktion während der write.table-Ausgabe gelesen, könnte einer der Schlüssel sein, die ich noch nicht vollständig mit dem Rest des Skripts ausgerichtet habe. Ich habe eine Menge anderer Fragen worden sehen, die ich anwendbar fühlte waren:
Write list of data.frames to separate CSV files with lapply
bis kein Glück. Ich schätze jede Einsichten oder Pfade in die richtige Richtung bei der Eingabe von x Anzahl von Dateien, führe die gleiche Funktion bei jedem aus und gebe dann die gleiche x Anzahl von Dateien aus. Vielen Dank.
'map()' aus dem 'purrr' Paket funktioniert gut dafür.Sie können einen Ordner mit Dateien einlesen, sie getrennt halten und die gleichen Operationen für jeden durchführen. Ich würde eine Funktion definieren, um die erforderlichen Operationen auszuführen und dann einzulesen, umzuwandeln und dann mit 'map()' – Mako212
zu schreiben. Das Problem an Ihrem 'lapply' Code ist also nur die angehängte Textdatei? – Parfait
@Parfait Nein, es kommt zu einer ähnlichen Schlussfolgerung, wie ich es möchte: dh es berechnet, was ich berechnen muss und liefert eine korrekte Ausgabe. Ich möchte jedoch 57 einzelne neue Dateien anstelle der 1 angehängten Datei für die Verwaltung der Datengröße und für das, was ich mit den Dateien machen möchte, im nächsten Schritt meines Arbeitsprozesses ausgeben. –