2016-05-21 4 views
0

Ich schrieb eine Funktion, die Operationen auf einer Liste ausführt. Jetzt versuche ich, die Ergebnisse in eine data.frame zu binden, aber nichts scheint zu funktionieren. Kann mir jemand erklären, wie ich das beheben kann, aber noch wichtiger, warum ich dieses Problem habe?Binden von Zeilen von einer Funktion in einen Datenrahmen

ret<-lapply(1:3,function(x){getVals(x,x+1,x+2)}) 

getVals<-function(x,y,z){ 
rbind(x,y,z)  
} 

as.data.frame(ret) 
as.matrix(ret,ncol=3) 

gewünschte Ausgabe ist:

1,2,3 
2,3,4 
3,4,5 
+4

Versuchen 'do.call (cbind , ret) 'und das sollte funktionieren. Und Sie können das mit 'as.data.frame' einbinden, um einen Datenrahmen anstelle einer von Ihnen konstruierten Matrix zu erhalten. – Gopala

+0

Das war was ich brauchte (obwohl es tatsächlich cbind war). Vielen Dank! – Rilcon42

+0

Kannst du nicht 'c' anstelle von' rbind' in 'getVals' verwenden? Das würde die Dinge erleichtern. Oder Sie können 'sapply' anstelle von' lapply' verwenden und eine Matrix als Ergebnis erhalten: 'sapply (1: 3, Funktion (x) getVals (x, x + 1, x + 2))' – lebatsnok

Antwort

0

Sie das Ergebnis als Datenrahmen erhalten kann durch so etwas wie dies zu tun:

as.data.frame(do.call(cbind, ret)) 
    V1 V2 V3 
x 1 2 3 
y 2 3 4 
z 3 4 5 
0

ret eine Liste von Arrays ist. Es gibt verschiedene Möglichkeiten, mit diesen Listen zu arbeiten. Ich ziehe es vor fehlenden oder konvertieren Matrix und dann auf den Datenrahmen:

df<-data.frame(matrix(unlist(ret),ncol=3, byrow=TRUE)) 
df 
Verwandte Themen