问题
设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的价值?
答案 0 :(得分:1)
创建一个数组并明确指定所需的尺寸:
array(A[1, , ], dim=c(K-1, d))