删除 R 数组中的维度

Aug*_*tin 8 arrays r

问题

令 K >= 2 且 d >= 3。我有一个维度为 的 3 维数组c(K,K-1,d)

例如,如果 K = d = 3,

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

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

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,,]
Run Code Online (Sandbox Code Playgroud)

我需要一个矩阵,因为我想做一个矩阵乘积。

我尝试过的

通过使用该选项,可以强制 R 不删除维度drop

M <- A[1,,,drop = FALSE]
dim(M)
Run Code Online (Sandbox Code Playgroud)

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

我也尝试使用as.matrix

M <- as.matrix(A[1,,])
dim(M)
Run Code Online (Sandbox Code Playgroud)

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

sie*_*ste 4

创建一个数组并显式指定所需的维度:

array(A[1, , ], dim=c(K-1, d)) 
Run Code Online (Sandbox Code Playgroud)