1

我正在一次处理多个 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”函数中,我正在计算两个浮点值。最后,我需要一个带有文件名和两个“浮点”值的数据框。我怎么做?

我尝试执行以下操作:

data.frame(res,filenames)

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

谢谢。

添加部分 dput(res) 输出:

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

2 回答 2

3

您可以尝试以下

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

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

于 2013-04-22T05:56:00.090 回答
2

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

res <- sapply(ldf, getResult)
data.frame(t(res),filenames)
于 2013-04-22T05:55:12.113 回答