R 如何将多个矩阵合并成一个大矩阵

R 如何将多个矩阵合并成一个大矩阵,r,matrix,rbind,R,Matrix,Rbind,我定义了一个函数来处理每个csv文件,它返回一个矩阵。我想在for循环中使用这个函数来处理所有文件,并将所有数据合并到一个大矩阵中。但是这个代码似乎不起作用 filenames=dir() bigMatrix = processEachCSV(filenames[1]) for (i in 2:length(filenames1)) { x = processEachCSV(filenames[i]) bigMatrix=rbind[bigMatrix,x] } 我猜这是因为我不能

我定义了一个函数来处理每个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)
}

processEachCSV基本方法如下:

do.call(rbind, lapply(filenames, read.csv))
自定义
read.csv
部分,使用
processEachCSV
函数(如果这确实是一个函数)的实际操作



或者,您可以查看“dplyr”中的一些
rbind\u list
函数或“data.table”中的
rbindlist
函数,两者都比
do.call(rbind,…)
更有效。在这些情况下,结果不会是一个
矩阵
,但您可以很容易地将其转换为矩阵。

列表
的形式读取所有文件,然后使用
do.call(rbind,yourList)
。如果要使用
rbind
,您需要使用
()
,而不是
[]
,对吗,processEachCSV实际上是一个函数。所以我尝试了“do.call(rbind,lappy(filenames,processEachCSV())”,但似乎文件名没有传递给processEachCSV函数。我还尝试使用do.call(rbind,lappy(as.list(filenames)),processEachCSV())将文件名从字符向量转换为列表。也不起作用。@user3768495,您应该尝试
do.call(rbind,lappy(文件名,processEachCSV))
。不要将
()
添加到
processEachCSV
。然而,如果不知道
processEachCSV
到底做了什么,我就很难确保我所建议的能够起作用。另外,所有文件的列数是否都相同?我尝试过不使用()但仍然不起作用。所有文件都有6列,我已经检查过了…我更新了我的问题,向您展示了函数。谢谢大家!@user3768495,我想这与问题无关,但当列包含不同的数据类型时,为什么要使用
矩阵?为什么不使用
数据帧