使用列向量索引多维表

时间:2012-07-17 20:18:58

标签: r

我有不同大小的列联表。我想使用数据集中的一组值对它们进行索引。然而, myTable[c(5,5,5,5)]显然不能做我想做的事。如何将c(5,5,5,5)视为myTable[5,5,5,5]

2 个答案:

答案 0 :(得分:3)

跟进@ ttmaccer的回答:这是有效的,因为?"["中的(略)晦涩的段落如下:

When indexing arrays by ‘[’ a single argument ‘i’ can be a
matrix with as many columns as there are dimensions of ‘x’;
the result is then a vector with elements corresponding to
the sets of indices in each row of ‘i’.

中使用t(ii)的效果
ii <- c(5,5,5,5)
a[t(ii)]

是将ii转换为[解释为矩阵的1x4矩阵,如上所述; a[matrix(ii,nrow=1)]会更明确,但不那么紧凑。

这种方法的好处(除了避免do.call的神奇表面方面)是它可以并行工作多个索引集,如

jj <- matrix(c(5,5,5,5,
               6,6,6,6),byrow=TRUE,nrow=2)
a[jj]
## [1] 4445 5556

答案 1 :(得分:2)

如果我正确理解了您的问题,那么使用do.call()的结构应该可以达到您想要的效果:

## Create an example array and a variable containing the desired index
a <- array(1:1e4, dim = c(10, 10, 10, 10))
ii <- c(5, 5, 5, 5)

## Use do.call to extract the desired element.
do.call("[", c(list(a), ii))
# [1] 4445

上述调用有效,因为以下内容都是等效的:

a[5, 5, 5, 5]
`[`(a, 5, 5, 5, 5)
do.call("[", list(a, 5, 5, 5, 5))
do.call("[", c(list(a), ii))