R:子集化N维阵列

时间:2014-01-29 21:32:24

标签: r multidimensional-array indexing

考虑以下三维数组:

set.seed(123)
arr = array(sample(c(1:10)), dim=c(3,4,2))

产生

> arr
, , 1

     [,1] [,2] [,3] [,4]
[1,]   10    9    8    2
[2,]    5    1    4   10
[3,]    6    7    3    5

, , 2

     [,1] [,2] [,3] [,4]
[1,]    6    7    3    5
[2,]    9    8    2    6
[3,]    1    4   10    9

我希望将其归类为

arr[c(1,2), c(2,4), c(1)]

但问题是,我不知道(a)哪些指数或(b)指数的维度。

使用索引变量访问N维数组的最佳方法是什么?

ll = list(c(1,2), c(2,4), c(1))

arr[ll]              # doesn't work
arr[grid.expand(ll)] # doesn't work
# ..what else?

2 个答案:

答案 0 :(得分:3)

使用do.call,例如:

do.call(`[`, c(list(arr), ll))

或者更干净,使用包装函数:

getArr <- function(...) 
   `[`(arr, ...)

do.call(getArr, ll)

     [,1] [,2]
[1,]   10    5
[2,]    7    3

答案 1 :(得分:1)

asub包中有abind函数:

library(abind)
asub(arr, ll)

也可以做更多,特别是沿着维度的子集提取(https://stackoverflow.com/a/17752012/1201032)。值得拥有你的工具箱。