如何将多个文件读入多维数组

3

我想要创建一个三维数组。

这是我尝试过的方法:

z<-c(160,720,420)
first_data_set <-array(dim = length(file_1), dimnames = z)

我读取的数据只有x和y两个维度。同样格式的其他数据也需要放到同一个数组里面,等到所有数据都读取完毕后,它们将全部存在同一个数组中,但不会互相覆盖。

因此,我认为数组必须是三维的;否则,在循环中无法保存所有读取的数据。


如果你的数据在第三个维度上没有关联,我会考虑使用列表。每组x、y数据将成为它自己的列表,然后你可以使用类似于“lapply”的东西对每个列表进行任何处理。如果不行,我们需要更多的信息来帮助你... - Justin
file_1看起来是什么样子?你能够粘贴或者链接到dput(file_1)的输出吗? - David LeBauer
3
目前这个问题过于模糊(可能还有点混淆)。当你发布一个数据示例以允许给出具体答案时,我将取消我的关闭投票(以及我的评论)。 - IRTFM
1个回答

7

假设你有两个大小为3x4的矩阵:

m1 <- matrix(rnorm(12), nrow = 3, ncol = 4)
m2 <- matrix(rnorm(12), nrow = 3, ncol = 4)

如果你想把它们放在一个数组中,首先要创建一个NA的数组:

A <- array(as.numeric(NA), dim = c(3,4,2))

然后填充数据到这些层中:
A[,,1] <- m1
A[,,2] <- m2

正如@Justin建议的那样,你可以将矩阵放在一个列表中:

A2 <- list()
A2[['m1']] <- m1
A2[['m2']] <- m2

从文件中读取矩阵:使用列表可以更轻松地从目录中的文件获取这些矩阵,而无需预先指定尺寸。假设您想要所有扩展名为csv的文件:
myfiles <- dir(pattern = ".csv")
for (i in 1:length(myfiles)){
   A2[[myfiles[i]]] <- read.table(myfiles[i], sep = ',')
}

1
mode(A)在这里开始是逻辑型的,因为默认情况下有NA,当您分配新值时,它会被强制转换为数字型 - 为了确保明确控制,考虑从A <- array(as.numeric(NA), dim = c(3,4,2))开始。 - mdsumner
@DavidLeBauer 非常感谢 :) - khateeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接