数组维度不正确和数组下标数量不正确

4

我刚开始使用R,因此我的问题可能很简单,但是我已经花了很多时间试图找出我的错误,但无济于事。在过去的一周中,我通过搜索其他问题/答案在这个网站上发现了很多帮助(谢谢!),但对于新手来说,解释别人的代码通常很困难。

我正在尝试构建一个由多个数据文件组成的三维数组,每个文件都具有相同的57x57维度。

# read in 100 files
Files = lapply(Sys.glob('File*.txt'), read.table, sep='\t', as.is=TRUE)

# convert to dataframes
Files = lapply(Files[1:100], as.data.frame)

# check dimensions of first file (it's the same for all)
dim(Files[[1]])
[1] 57 57

# build empty array
Array = array(dim=c(57,57,100))

# read in the first data frame
Array[,,1] = Files[1]

# read in the second data frame
Array[,,2] = Files[2]
Error in Array[, , 2] = Files[2] : incorrect number of subscripts

# if I check...
Array[,,1] = Files[1]
Error in Array[, , 1] : incorrect number of dimensions

# The same thing happens when I do it in a loop:
x = 0
for(i in 1:100){
    Array[,,x+1] = Files[[i]]
    x = x + 1
}

Error in Array[, , 1] = Files[[1]] : 
  incorrect number of subscripts

数据框不能是一个数组的切片,这一点很容易看出来。如果你想要一个57x57x3的数组,那就直接创建一个吧。但请不要用“数据框”一词来称呼数组的切片,这样会更容易理解,如果您创建一个测试对象或三个测试对象,比如维度为7x7,并要求填充一个7x7x3的数组,将会更好。 - IRTFM
1个回答

4

在进行赋值操作之前,您需要将数据框转换为矩阵:

l <- list(data.frame(x=1:2, y=3:4), data.frame(x=5:6, y=7:8))
arr <- array(dim=c(2, 2, 2))
arr[,,1] <- as.matrix(l[[1]])
arr[,,2] <- as.matrix(l[[2]])
arr
# , , 1
# 
#      [,1] [,2]
# [1,]    1    3
# [2,]    2    4
# 
# , , 2
# 
#      [,1] [,2]
# [1,]    5    7
# [2,]    6    8

您可以使用unlist函数将要组合的矩阵列表应用于一行中来构建数组:

arr2 <- array(unlist(lapply(l, as.matrix)), dim=c(dim(l[[1]]), length(l)))
all.equal(arr, arr2)
# [1] TRUE

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