do.call()
是一個選項:
dim_count <- 5
indexes <- c(1, 2, 2, 2, 3)
dims <- rep(3, dim_count)
pi <- array(seq_len(prod(dims)), dims)
do.call(`[`, c(list(x = pi), as.list(indexes)))
哪給出:
> do.call(`[`, c(list(x = pi), as.list(indexes)))
[1] 202
> pi[1, 2, 2, 2, 3]
[1] 202
棘手的一點是得到正確格式的參數列表。 pi
應該是"["
(或命名爲參數x
,參見?"["
)的第一個參數,同時我們希望indexes
本身的每個元素都是提供的列表的組件,而不是該列表中的矢量。因此,令人費解的c(list(x = pi), as.list(indexes))
。
構建,這可能是更容易跟蹤參數列表的替代方法是:
ARGS <- vector("list", length = dim_count + 1)
ARGS[[1]] <- pi
ARGS[2:length(ARGS)] <- indexes
do.call("[", ARGS)
這給
> do.call("[", ARGS)
[1] 202
> pi[1, 2, 2, 2, 3]
[1] 202
+1 Hooray矩陣索引! – Aaron