求R中多维数组的维数索引

求R中多维数组的维数索引,r,multidimensional-array,R,Multidimensional Array,我在看三维数组M:M使用嵌套的outers怎么样 outer(1:3/10,outer((1:3)^2,sqrt(1:3),"+"),"+") , , 1 [,1] [,2] [,3] [1,] 2.1 5.1 10.1 [2,] 2.2 5.2 10.2 [3,] 2.3 5.3 10.3 , , 2 [,1] [,2] [,3] [1,] 2.514214 5.514214 10.51421 [2,] 2.614214 5.614

我在看三维数组M:
M使用嵌套的
outer
s怎么样

outer(1:3/10,outer((1:3)^2,sqrt(1:3),"+"),"+")
, , 1

     [,1] [,2] [,3]
[1,]  2.1  5.1 10.1
[2,]  2.2  5.2 10.2
[3,]  2.3  5.3 10.3

, , 2

         [,1]     [,2]     [,3]
[1,] 2.514214 5.514214 10.51421
[2,] 2.614214 5.614214 10.61421
[3,] 2.714214 5.714214 10.71421

, , 3

         [,1]     [,2]     [,3]
[1,] 2.832051 5.832051 10.83205
[2,] 2.932051 5.932051 10.93205
[3,] 3.032051 6.032051 11.03205

@詹姆斯的答案更好,但我认为你的问题的狭义答案(多维等价于
row()/col()
)是
slice.index

M<- array(dim=c(3,3,3))
slice.index(M,1)/10+slice.index(M,2)^2+sqrt(slice.index(M,3))
可以说,从“地面”开始

 i <- rep(1:3, times=3*3)
 j <- rep(1:3 , times= 3, each=3)
 k <- rep(1:3 , each= 3*3)
 M <- array( i/10 + j^2 + sqrt(k), c(3, 3, 3))
 M

i您也可以使用
arrayInd

M   <- array(dim = c(3, 3, 3))
foo <- function(dim1, dim2, dim3) dim1/10 + dim2^2 + sqrt(dim3)
idx <- arrayInd(seq_along(M), dim(M), useNames = TRUE)
M[] <- do.call(foo, as.data.frame(idx))

我很酷。如果有一个
outer
的多维变量,那么这将是一个不错的选择,例如
cos(i*j*k)
,但对于当前的情况,这是一个很好的答案。我怀疑我没有告诉你任何不明显的事情,但也许其他人可以使用它:
数组(mappy(函数(x,y,z)cos(x*y*z),i,j,k),c(3,3))
。请参考我对i、j和k的回答。当我读到这个问题时,我认为
combn(1:3,3,foo)
用明显的
foo
就可以了。是否存在生成所有排列的
combn
变体?当然有一种方法可以通过
expand.grid
实现这一点,但随后必须将结果重塑为所需的数组结构anks,各位。其中一个问题涉及I、J和K的交叉产品,如本的COS(IJK),所以看起来像“代码>切片”。Index < /Cord>选项是最优雅的。@ USER 176944如果您对所提供的答案感到满意,请考虑接受其中之一。常见问题解答部分介绍了如何执行此操作以及为什么它很有用。若要接受,请勾选要接受的答案旁边的大勾号。如果这样做,还可以使用
expand.grid
。这样更容易推广到更高维度。我只是想为rep演示“times”和“each”参数的用法。我并不是真的认为这是一种“竞争”策略。我很喜欢arrayInd的用法!
M   <- array(dim = c(3, 3, 3))
foo <- function(dim1, dim2, dim3) dim1/10 + dim2^2 + sqrt(dim3)
idx <- arrayInd(seq_along(M), dim(M), useNames = TRUE)
M[] <- do.call(foo, as.data.frame(idx))