Zurück einen Daten-frame aus function
Ich habe den folgenden code innerhalb einer Funktion
Myfunc<- function(directory, MyFiles, id = 1:332) {
# uncomment the 3 lines below for testing
#directory<-"local"
#id=c(2, 4)
#MyFiles<-c(f2.csv,f4.csv)
idd<-id
df2 <- data.frame()
for(i in 1:length(idd)) {
EmptyVector <- read.csv(MyFiles[i])
comp_cases[i]<-sum(complete.cases(EmptyVector))
print(comp_cases[[i]])
id=idd[i]
ret2=comp_cases[[i]]
df2<-rbind(df2,data.frame(id,ret2))
}
print(df2)
return(df2)
}
Dies funktioniert, wenn ich versuche, führen Sie es in R indem Sie den code in der Funktion und auskommentieren der Rückkehr. Ich bekomme eine schöne Daten-frame wie aus der print-Anweisung:
> df2
id ret2
1 2 994
2 4 7112
Jedoch, wenn ich versuche, eine Rückkehr der dataframe df2
von der Funktion, es gibt nur die 1. Zeile, ignorieren Sie alle anderen Werte. Mein problem ist, dass es funktioniert innerhalb der Funktion für verschiedene Werte, die ich versucht habe (öffnen mehrerer Dateien mit verschiedenen Kombinationen) und nicht wenn ich versuche auf die Daten zurück, die Rahmen. Kann jemand helfen, bitte. Vielen Dank im Voraus.
- Wie nennst du deine Funktion?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich Sie richtig verstehe, Sie versuchen, erstellen Sie ein dataframe mit der Anzahl der abgeschlossenen Fälle für jeden
id
. Angenommen, Ihre Dateien sind Namen mit den id-Nummern, wie Sie angegeben wurden (z.B.f2.csv
), können Sie zur Vereinfachung Ihrer Funktion wie folgt:Rufen Sie diese Funktion wie folgt:
Eine Erklärung für den obigen code. Sie haben zu brechen Ihr problem in Schritte:
x <- id
id
Sie wollen die Zahl der abgeschlossen Fälle. Um dies zu erreichen, müssen Sie Lesen Sie die Datei zuerst. Das ist getan durchread.csv(as.character(paste0(directory,"/","f",id[i],".csv")))
. Um die Anzahl der abgeschlossenen Fälle für die Datei, die Sie haben, um wickeln Sie dieread.csv
code innerhalbsum
undcomplete.cases
.y <- vector()
), auf die Sie hinzufügen können, die Anzahl der abgeschlossenen Fälle aus Schritt 2. Das ist getan durch umwickeln Sie den code aus Schritt 2 Inhalty <- c(y, "code step 2")
. Mit diesem fügen Sie die Anzahl der abgeschlossenen Fälle für jedenid
zu den Vektor -y
.df <- data.frame(x, y)
und weisen einige aussagekräftigecolnames
.Indem Sie die Schritte 1, 2 und 3 (mit Ausnahme der
y <- vector()
Teil) in einer for-Schleife zum iterieren über die Liste der angegebenen id ist. Erstellen der leere Vektor mity <- vector()
muss getan werden, bevor die for-Schleife, so dass die for-Schleife kann Werte hinzufügeny
.Myfiles
parameter in Ihrer Funktion. Es war nicht nötig, als Sie die Dateinamen haben alle die gleiche Struktur und können abgeleitet werden von der id ist. Ich fügte hinzu, eine Erklärung. Ich hoffe, das hilft.Dieser ist eigentlich ziemlich leicht zu umgehen durch ändern der Rahmen.
Das Problem ist, dass Sie beim erstellen der ursprünglichen dataframe wie eine lokale variable, die zunächst, dann bist du nur ein austauschen der Zeilen, so werden Sie wind-up mit nur der ersten und der letzten Ergebnisse in der dataframe.
Wenn ich erstellen Sie eine for-Schleife mit R und möchten, fügen Sie die Ergebnisse von aufeinanderfolgenden Abfragen etc. nach einigen anfänglichen dataframe, Tue ich dies:
Scoping kann jeder iteration erstellen Sie einen dataframe, dass Sie können anfügen an die ursprüngliche, ohne dass der Iterationen, die zwischen den ersten und den letzten.
<<-
globalen Zuweisungsoperator. Es war hilfreich, in meinen Kontext