有选择地使用 drop [R] - 仅删除指定的长度为 1 的维度

CJB*_*CJB 6 arrays r subset multidimensional-array

子集函数中的drop函数和drop参数[都完全起作用或根本不起作用。例如,如果我有一个四维数组,其第 2 维和第 4 维的长度仅为 1,那么drop将返回一个删除了这两个维度的二维数组。我怎样才能放下第 4 维而不是第 2 维?

例如

arr <- array(1:4, c(2, 1, 2, 1))
drop(arr)
arr[,,, 1, drop = TRUE]
Run Code Online (Sandbox Code Playgroud)

在我的情况下这样做的原因是我可以正确设置数组以绑定到abind. 在给定的示例中,人们可能希望arr[,,, 1]沿维度 2绑定到一个 3 维数组。

CJB*_*CJB 5

我又想了一些,并提出了解决方案。以下函数定义新的目标维度并将数据放入这些维度的新数组中。 omit是一个永远不会下降的维数向量。

library("abind")
drop.sel <- function(x, omit){
  ds <- dim(x)
  dv <- ds == 1 & !(seq_along(ds) %in% omit)
  adrop(x, dv)
}
Run Code Online (Sandbox Code Playgroud)

如果有人认为他们有更优雅的解决方案,我会很高兴看到它。

  • 另外,我刚刚在“abind”包中看到了“adrop”函数。这似乎是为此而设计的。 (3认同)