R函数的多维矩阵数据访问

时间:2015-02-05 14:53:48

标签: r

我有以下数据类型

dim(sampleData$mod)
# [1]   5   9   6   7  73 144

我需要提取这些数据

t1 <- as.vector(sampleData$mod[,,,1,,])

问题是我需要一个函数来从任何变量维

中获取数据

我想要这样的一些:

sampleData$mod[tmp]

我有这个

sampleData$mod[,,,1,,]

2 个答案:

答案 0 :(得分:0)

最简单的解决方案是运行6个嵌套for循环(每个维度一个),然后将值一个接一个地放在向量vec上。然后你做sampleData$mod=vec

请注意,您应该将向量初始化为vec=rep(0, 5*9*6*7*73*144),然后将值放入其中,而不是执行c(vec, new_value),否则由于向量调整大小,您将面临巨大的开销。

答案 1 :(得分:0)

根据我对问题的理解,以下内容可能会有所帮助:

ff = function(array, dims, inds)
{
    dimseq = lapply(dim(array), seq_len)
    dimseq[dims] = inds 
    do.call("[", c(list(array), dimseq))
}   

ar = array(seq_len(3*2*4*3*5), c(3,2,4,3,5))
identical(ar[, , 1, , ], ff(ar, 3, 1))
#[1] TRUE
identical(ar[, 1, , 2, 1], ff(ar, c(2, 4, 5), c(1, 2, 1)))
#[1] TRUE
identical(ar[, 1, , 2:3, c(1, 3)], ff(ar, c(2, 4, 5), list(1, 2:3, c(1, 3))))
#[1] TRUE