我定义了一个处理每个csv文件的函数,它返回一个矩阵。我想在for循环中使用此函数来处理所有文件并将所有数据组合成一个大矩阵。但似乎这段代码不起作用。
filenames=dir()
bigMatrix = processEachCSV(filenames[1])
for (i in 2:length(filenames1)) {
x = processEachCSV(filenames[i])
bigMatrix=rbind[bigMatrix,x]
}
我想这是因为我无法将x和bigMatrix转换为bigMatrix本身?
我该怎么做?
processEachCSV函数是这样的:
processEachCSV <- function (filename){
x = read.table(filename, header=F, sep=',', fileEncoding='UTF-8')
x$V4=as.numeric(gsub("[^0-9.]",'', as.character(x$V4)))
x$V5=as.numeric(gsub("[^0-9.]",'', as.character(x$V5)))
x$V6=substr(filename, 1, nchar(filename)-4)
colnames(x)=c('DateTime','Site','AQI','PM25','PM10','City')
x=as.matrix(x)
return (x)
}
答案 0 :(得分:3)
基本方法如下:
do.call(rbind, lapply(filenames, read.csv))
使用read.csv
函数实际执行的操作自定义processEachCSV
部分(如果确实是函数)。
或者,您可以查看&#34; dplyr&#34;中的一些rbind_list
函数。或来自&#34; data.table&#34;的rbindlist
函数,两者都比do.call(rbind, ...)
更有效。在这些情况下,结果不会是matrix
,但您可以很容易地将其转换为矩阵。