删除R数组中的维度

时间:2017-11-02 12:36:50

标签: arrays r

问题

设K> = 2且d> = 3.我有一个尺寸为c(K,K-1,d)的三维数组。

例如,如果K = d = 3,

A <- array(1:18,dim = c(3,2,3))

现在我想通过选择沿第一维的索引得到(K-1)x d矩阵,例如

M <- A[1,,]

如果K> 2它工作正常。但是如果K = 2,则第二个维度为1,R的默认行为是丢弃它。因此,以下代码将返回长度为d的向量而不是矩阵。

K <- 2
d <- 3
A <- array(1:6,dim = c(K,K-1,d))
A[1,,]

我需要一个矩阵,因为我想做一个矩阵产品。

我尝试了什么

可以使用drop选项强制R不要删除尺寸。

M <- A[1,,,drop = FALSE]
dim(M)

但这会返回一个三维数组,因为第一个维度也不会被删除。

我也尝试使用as.matrix

M <- as.matrix(A[1,,])
dim(M)

这返回d x(K-1)矩阵而不是所需的(K-1)x d矩阵。好吧,我可以使用转置t()但是一旦K> 2,它就不会再工作了。是否有一种有效的方法可以使这项工作无论K的价值?

1 个答案:

答案 0 :(得分:1)

创建一个数组并明确指定所需的尺寸:

array(A[1, , ], dim=c(K-1, d))