2016-05-21 45 views
0

我寫了一個在列表上執行操作的函數。現在我試圖將結果綁定到data.frame,但似乎沒有任何工作。有人可以解釋如何解決這個問題,但更重要的是,爲什麼我有這個問題?將函數中的行綁定到數據框中

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) 

所需的輸出是:

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

嘗試'do.call(cbind ,ret)',那應該有效。而且,你可以用'as.data.frame'來包裝它,以獲得一個數據框,而不是你構建的矩陣。 – Gopala

+0

這就是我所需要的(儘管它實際上是cbind)。謝謝! – Rilcon42

+0

你不能在'getVals'中使用'c'而不是'rbind'嗎?這會讓事情變得更容易。或者你可以用'sapply'而不是'lapply'來得到一個矩陣:'sapply(1:3,function(x)getVals(x,x + 1,x + 2))' – lebatsnok

回答

0

你可以做這樣的事情得到的結果作爲一個數據幀:

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

RET是陣列的列表。這些列表有幾種工作方式。我寧願選擇不公開,轉化爲矩陣,然後到數據幀:

df<-data.frame(matrix(unlist(ret),ncol=3, byrow=TRUE)) 
df 
相關問題