对多维数组的索引进行R迭代

对多维数组的索引进行R迭代,r,R,我有一个多维数组,它的维数在运行时之前是未知的,例如: dims <- rep(3, dim_count) arr <- array(0, dims) 我希望能够得到一系列向量: c(1,1) c(1,2) c(1,3) c(2,1) c(2,2) c(2,3) 或者只是从上一个函数生成下一个函数 我能想到的只有三种方法: 迭代1:length(arr)并将这些数字转换为 索引向量-在上面的示例中,我将寻找一个(最好是内置的)函数,它执行indexesOf(arr,4)->c(2

我有一个多维数组,它的维数在运行时之前是未知的,例如:

dims <- rep(3, dim_count)
arr <- array(0, dims)
我希望能够得到一系列向量:

c(1,1)
c(1,2)
c(1,3)
c(2,1)
c(2,2)
c(2,3)
或者只是从上一个函数生成下一个函数

我能想到的只有三种方法:

  • 迭代
    1:length(arr)
    并将这些数字转换为 索引向量-在上面的示例中,我将寻找一个(最好是内置的)函数,它执行
    indexesOf(arr,4)->c(2,1)

  • 获取最后生成的索引向量,增加元素在其最后位置上的值,并确保它在
    dims
    给定的范围内

  • 生成一个矩阵,其中的列将包含我需要的所有索引

  • 但遗憾的是,前两种方法都不是快速或优雅的。第三个看起来是个不错的主意,我可以在纸上写,但是我不能用R用
    rbind
    等等来编码

    有没有一种很好的方法可以做到这一点,最好不要嵌套循环

    仅作比较,我的#3的丑陋循环实现:

    getAllIndex=函数(dims){
    
    dimCount如果我正确地解释了您的请求,那么

    as.matrix(do.call(expand.grid,lapply(dim(arr),seq)))
    

    似乎在做#3…

    是的,
    展开。网格
    正是我想要的:)
    getAllIndexes = function(dims) {
      dimCount <- length(dims)
      ret <- array(1:dims[1], c(1,dims[1]))
      for(i in 2:length(dims)){
        curdims <- dims[i]
    
        a <- array(rep(ret, curdims), c(nrow(ret), curdims * ncol(ret) ))
        b <- rep(1:curdims, each=ncol(ret))
        ret <- rbind(a, b, deparse.level=0)
      }
      ret
    }
    
    as.matrix(do.call(expand.grid,lapply(dim(arr),seq)))