我有一个数组arr
,可以有任意多个维度,例如
arr <- array(NA, c(2,3,5))
我需要一个函数
getArrValues
作为输入向量,并使用该向量从数组中提取值:getArrValues(arr, c(1,2,2)) # = arr[1,2,2]
getArrValues(arr, c(1,2)) # = arr[1,2,]
getArrValues(arr, c(1)) # = arr[1,,]
您有什么想法可以实现吗?一个维度始终只有一个索引,索引以数组维度的顺序作为向量提供,数组可以具有任意数量的维度,这些维度总是大于或等于输入向量的长度。
最佳答案
在语言上使用计算非常简单。
arr <- array(NA, c(2,3,5))
getArrValues <- function(x, i) {
stopifnot(is.array(x), is.numeric(i))
if (!is.integer(i)) i = as.integer(i)
li = as.list(i)[seq_along(dim(x))]
li = lapply(li, function(x) if (!is.null(x)) x else substitute())
eval(
as.call(c(list(as.name("["), as.name("x")), li))
)
}
getArrValues(arr, c(1,2,2)) # = arr[1,2,2]
getArrValues(arr, c(1,2)) # = arr[1,2,]
getArrValues(arr, c(1)) # = arr[1,,]
只需删除
eval(
呼叫即可调查未评估的确切呼叫。