考虑以下三维数组:
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?
答案 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)。值得拥有你的工具箱。