问题
假设 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 值下都能正常运行?