6

さまざまなサイズの分割表があります。データセットの一連の値を使用してインデックスを作成したいと思います。しかし、 myTable[c(5,5,5,5)]明らかに私が望むことをしません。c(5,5,5,5)として読むにはどうすればよいmyTable[5,5,5,5]ですか?

4

2 に答える 2

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)]

上記のように行列として解釈されるii1x4 行列に変換することです。より明示的ですが、コンパクトではありません。[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
于 2012-07-17T21:12:53.383 に答える
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))
于 2012-07-17T20:44:21.720 に答える