如何将for循环的结果转换为列表?

时间:2015-12-19 20:26:56

标签: r

我在目录中有几个文件。我可以这样读它们:

 m1<-matrix(nrow=4,ncol=2,data=runif(8))
 m2<-matrix(nrow=4,ncol=2,data=runif(8))

我想知道如何将所有矩阵(file2)作为列表? 例如:

ml <- list(m1, m2)

我把它们放在一个列表中:

engine.execute(text('''copy some_table from :csv
                       delimiter ',' csv'''
                   ).execution_options(autocommit=True),
               csv='/tmp/a.csv')

2 个答案:

答案 0 :(得分:2)

除了akrun的答案之外,您还可以通过利用lapply功能将它们放在列表中。稍微修改你的代码,它看起来像这样:

files <- list.files("C:\\New folder", "*.bin",full.names=TRUE)

dat <- lapply(1:length(files), function(i) {
  conne <- file(files[i], "rb")
  file  <- readBin(conne, double(), size=4,  n=300*700, signed=TRUE)
  file2 <- matrix(data=file,ncol=700,nrow=300)
  close(conne) # as indicated in the comments below
  return(file2)
})

dat现在是所有矩阵的列表。 lapply充当循环,与for非常相似,并将其第一个参数的每次迭代(此处为1:length(files))作为参数传递给函数。它从函数中获取的返回值将作为自己的元素传递给名为dat的列表。

答案 1 :(得分:1)

假设OP在全局环境中创建了对象'm1','m2'等,我们可以使用mget通过指定{{1}来获取list中对象的值pattern中的参数为'm'后跟数字(ls)。

\\d+

如果问题是mget(ls(pattern='m\\d+')) 将一个大矩阵变成块

split