R +将结果列表转换为数据框

时间:2013-04-22 05:48:38

标签: r dataframe lapply

我正在一次性处理多个csv文件。

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'函数中,我计算两个浮点值。最后,我需要一个带有文件名和两个'float'值的数据框。我怎么做?

我尝试了以下操作:

data.frame(res,filenames)

但我没有得到理想的结果。有人可以指导吗?

感谢。

添加部分输入(res)输出:

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

2 个答案:

答案 0 :(得分:3)

您可以尝试以下

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

do.call会在列表rbind上调用res函数,然后data.frame会将列绑定到data.frame

答案 1 :(得分:2)

您可以使用sapply()代替lapply()来计算res。这将使矩阵具有与文件数对应的两行和两列。然后在data.frame()中使用t()将您的矩阵转置为两列。

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