我在目录中有几个文件。我可以这样读它们:
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')
答案 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