2013-04-22 161 views
1

我一次處理多個csv文件。R +將結果列表轉換爲數據框

getResult<-function(df){ 
    c(runif(1, 0, 1), runif(1, 0, 1)) 
} 

filenames <- list.files("temp", pattern="*.csv", full.names=TRUE) 
ldf <- lapply(filenames, read.csv) 
res <- lapply(ldf, getResult) 

在'getResult'函數中我計算了兩個浮點值。最後,我需要一個帶有文件名和兩個「浮點」值的數據框。我怎麼做?

我試着做以下幾點:

data.frame(res,filenames) 

但我沒有得到期望的結果。有人可以指導嗎?

謝謝。

添加部分dput(RES)輸出:

list(c(0, 0.11340206185567), c(0, 0.0317919075144509), 
c(0, 0.0569948186528497)) 

回答

2

可以使用sapply()而不是lapply()計算res。這將使矩陣具有與文件數對應的兩行和兩列。然後在data.frame()使用t()將您的矩陣轉置爲兩列。

res <- sapply(ldf, getResult) 
data.frame(t(res),filenames) 
+0

我喜歡這個答案更因爲它沒有轉換結果轉換爲字符串。另一個答案是將結果轉換爲字符串。 – 2013-04-22 06:02:21

+0

@RachitAgrawal:更新了我的答案。 – 2013-04-22 06:46:34

3

你可以嘗試以下

data.frame(do.call(rbind, res), filenames) 

do.call將調用rbind功能在列表res然後data.frame將列綁定到一個data.frame