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

时间:2015-12-10 11:08:36

标签: arrays r multidimensional-array subset

drop功能和drop子集功能中的[参数完全或根本不工作。例如,如果我有一个第二维和第四维仅为长度1的四维数组,那么drop将返回一个二维数组,同时删除这两个维度。我怎样才能放弃第四维而不是第二维?

e.g。

arr <- array(1:4, c(2, 1, 2, 1))
drop(arr)
arr[,,, 1, drop = TRUE]

在我的情况下这样做的原因是我可以正确设置数组以绑定abind中的其他数组。在给出的示例中,可能希望将arr[,,, 1]绑定到沿维度2的三维数组。

1 个答案:

答案 0 :(得分:2)

我已经考虑了一些,并提出了解决方案。下面的函数定义了新的目标维度,并将数据拟合到这些维度的新数组中。 omit是一个永不丢弃的维数的向量。

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

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