从多维数组中提取值

提姆

我有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(通话即可调查未评估的确切通话。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章