2016-03-04 13 views
3

我正在使用R與3D維數組。我試圖在不同的時刻使用它,如同一組二維矩陣。R子集和在多維數組中分配

我發現一個行爲,我真的不明白,我想知道爲什麼正在發生。我試圖在這裏和其他地方找到解釋,但直到現在我仍然有疑問。

我有我的3D陣列像這樣:

array3D=array(1:45,c(5,3,3))

而且如我所料,我可以訪問到一個單獨的二維矩陣

array3D[1,,] 
    [,1] [,2] [,3] 
[1,] 1 16 31 
[2,] 6 21 36 
[3,] 11 26 41 

但是試圖訪問兩個二維矩陣我不'得到我所期望的

array3D[1:2,,] 
, , 1 

    [,1] [,2] [,3] 
[1,] 1 6 11 
[2,] 2 7 12 

, , 2 

    [,1] [,2] [,3] 
[1,] 16 21 26 
[2,] 17 22 27 

, , 3 

    [,1] [,2] [,3] 
[1,] 31 36 41 
[2,] 32 37 42 

我發現我可以溶膠這是使用aperm(array3D[1:2,,]),但我不明白在做什麼。

而另一個問題是,當我嘗試做一個任務,我不明白爲什麼這不工作

array3D[1:2,,]=matrix(9:1,3,3) 
array3D[1,,] 
    [,1] [,2] [,3] 
[1,] 9 3 6 
[2,] 7 1 4 
[3,] 5 8 2 

我認爲我可以aaply用循環解決這個問題也許正如我在這裏讀到的,但我認爲如果我想使用3D數組,對於瞭解發生的事情非常重要。如果有人能指引我走向正確的方向,我將會非常開心。

我試圖在這裏找到答案,並閱讀http://adv-r.had.co.nz/但到目前爲止沒有運氣。

更新

我發現一切正常,如果不是使用我用最後一個第一個索引,但我還是不明白爲什麼。 R是固有的東西嗎? 是否有可能以其他方式使用第一個?

array3D=array(1:45,c(3,3,5)) 
array3D[,,1:2]=matrix(9:1,3,3) 
array3D[,,2] 
    [,1] [,2] [,3] 
[1,] 9 6 3 
[2,] 8 5 2 
[3,] 7 4 1 

回答

0

我認爲這不是很清楚你想要達到的目標,但這裏有一些例子: 關於第一個問題,你可以選擇兩個在z方向三個三乘三矩陣這樣做的:

array3D[,,1:2] 

,因此,你可以用適當大小的數組替換:

array3D[,,1:2] <- array(18:1,c(3,3,2)) 

關於爲什麼要使用第三個索引你的問題:想想AB像3D座標系統中的z方向一樣。行將是x方向(垂直),列是y方向(水平)。索引array3D[1:2,,]時,您選擇了前兩行,同時保持x和z方向的所有內容。

+0

也許我沒有解釋清楚,在我的情況下,陣列上的一個維度比其他維度要大得多,我會改變這個問題來試圖反映這個問題。 – Cohet

+0

我已經改變了一點,使一個維度比其他維度更大。問題是,我希望得到前兩個三維矩陣做'array3D [1:2 ,,]'但我弄得一團糟。我不知道爲什麼 – Cohet

+0

我期待着更復雜的東西,但看起來這真是一個愚蠢的錯誤。我拉着頭髮,謝謝你的回答。 – Cohet