【发布时间】:2016-05-31 02:59:51
【问题描述】:
我正在尝试使用 Reduce 从多个 .csv 文件中提取一列。 我有的是
带有每个 .csv 文件路径的向量
filepaths
读取 .csv 并返回其中一列的函数
getData <- function(path,column) {
d = read.csv(path)
d[,column]
}
和 Reduce 函数,将 getData 函数应用于每个文件路径并将结果存储在单个集合中(为了演示,我只取前三个路径字符串)
Reduce(function(path,acc) append(acc, getData(path,column)), filepaths[1:3],c())
如果我这样做,我会收到以下错误,当使用其中一个文件路径调用 read.csv 时会发生这种错误
read.table 中的错误(文件 = 文件,标题 = 标题,sep = sep,quote = quote,: 'file' 必须是字符串或连接
这很奇怪,因为如果我像手动调用“getData”函数
getData(filepaths[1],col)
getData(filepaths[2],col)
getData(filepaths[3],col)
它有效。
我知道,我可以使用 for 循环来做到这一点。但我想了解,问题是什么。
【问题讨论】:
-
试试
do.call(rbind,lapply(filepaths, fread, select="colname")) -
您也可以这样做,您的函数
unlist(lapply(filepaths, function(x){ getData(x,1) }))将读取第一列。 -
为什么要读取整个 .csv 然后只提取一列?效率低下。
fread例如有一个select参数...