首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用列向量对多维表进行索引

使用列向量对多维表进行索引
EN

Stack Overflow用户
提问于 2012-07-18 04:18:58
回答 2查看 1.2K关注 0票数 6

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-18 05:12:53

跟进@ttmaccer的答案:这之所以有效,是因为?"["中有一个(稍微)晦涩的段落:

代码语言:javascript
复制
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)的效果

代码语言:javascript
复制
ii <- c(5,5,5,5)
a[t(ii)]

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

这种方法的好处是(除了避免了do.call看似神奇的方面),它对多组索引并行工作,如下所示

代码语言:javascript
复制
jj <- matrix(c(5,5,5,5,
               6,6,6,6),byrow=TRUE,nrow=2)
a[jj]
## [1] 4445 5556
票数 3
EN

Stack Overflow用户

发布于 2012-07-18 04:44:22

如果我正确理解了您的问题,那么这个使用do.call()的构造应该可以执行您想要的操作:

代码语言:javascript
复制
## 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

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

代码语言:javascript
复制
a[5, 5, 5, 5]
`[`(a, 5, 5, 5, 5)
do.call("[", list(a, 5, 5, 5, 5))
do.call("[", c(list(a), ii))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11530241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档