2017-07-18 48 views
0

之后我需要创建一个按行,从左到右和后代排序的3D数组。由R中的行填充的3D数组从左到右排序,在后裔

x <- 100 

我已经试过这一点:

b <- array(1:96, dim= c(8,4,3)) 

但它首先排序descendently。使用apperm(b)不工作,以及

我想结果是这样的:

, , 1 

1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 
15 16 17 18 
19 20 21 22 
+0

https://stackoverflow.com/questions/31755233/r-fill-multidimensional-array-by-row – Masoud

+0

他们使用apperm,但在这种情况下不起作用 –

回答

2

array默认填充值沿着第一维度,那么第二尺寸,然后第三;你所寻找的是填补它的(第2,第1,第3)的顺序,你可以用第一维和第二维形状数组初始化切换,然后在其上使用aperm

b <- aperm(array(1:96, dim= c(4,8,3)), c(2,1,3)) 
#       ^^  ^^ switch the dimension twice here 
b 
, , 1 

    [,1] [,2] [,3] [,4] 
[1,] 1 2 3 4 
[2,] 5 6 7 8 
[3,] 9 10 11 12 
+0

hu·mil·i·a·tion =比较我的答案你的。 ;) – Masoud

+1

@Masoud一点都不。只要它有效。 ^^ – Psidom

+0

@Psidom不错,干净! –

0

编辑:我第一次尝试,但@ Psidom的回答是这样做的正确方法。

您需要将它作为3个矩阵的组合,然后将它们组合成一个数组。在下面的代码中,我使用了96*i/3来使它对3个以上的矩阵进行灵活组合。

b <- array(c(aperm(array(1:(96*1/3), dim = c(4,8))) , 
     aperm(array(33:(96*2/3), dim = c(4,8))), 
     aperm(array(65:(96*3/3), dim = c(4,8)))) , 
      dim = c(8 , 4 , 3)) 

这将是输出:

b[, , 1] 

#  [,1] [,2] [,3] [,4] 
# [1,] 1 2 3 4 
# [2,] 5 6 7 8 
# [3,] 9 10 11 12 
# [4,] 13 14 15 16 
# [5,] 17 18 19 20 
# [6,] 21 22 23 24 
# [7,] 25 26 27 28 
# [8,] 29 30 31 32