2012-06-09 95 views
26

我想在R中設置一個3D矩陣。我想這是一個簡單的方法。但是,到目前爲止我還沒有找到解決方案。 假設我們要創建一個365x6x4矩陣。 對我而言,至關重要的是我可以如何更改矩陣中的一個條目。假設我們想將值204分配給元素[304,5,2]。 我非常感謝你的回答!在R中設置3D矩陣並訪問某些元素

謝謝!最好,F

+0

3D矩陣?這不是一個3D陣列嗎? – Havelock

回答

28

試試這個:

ar <- array(someData, c(365, 6, 4)); 
ar[304,5,2] <- 204; 

其中someData可能

someData <- rep(0, 365*6*4); 

,甚至更好,也許

someData <- rep(NaN, 365*6*4); 
+1

錯誤的表示法。 ar [304,5,2]是正確的。 –

+1

哦,的確,謝謝! – Havelock

+0

沒問題,你必須考慮C :) –

5

試試這個簡單的例子(已經取得的例子一個相當小的一個,這樣很明顯這是怎麼回事 - !我下面如何調整它的確切的問題解釋)......

m = array(1:60, dim=c(3,4,5)) 

m[2,1,5] 
[1] 50 

m[2,1,5] = -50 

m[2,1,5] 
[1] -50 

鍵入m以查看整個3D陣列:)

在您的示例中,您將初始數組設置爲m = array(NA, dim=c(365,6,4))(這將使用NAs填充以開始 - 您是否有數據填充它?)當然,作業是m[304,5,2] = 204 :)

+0

爲了澄清,'m [2,1,5]'最初是50(由於'm'填充的方式),並且在更改後變爲-50('m [2,1,5] = - 50 ')。輸入'm'查看整個3D陣列:) –

13

矩陣是一個數組的特殊2維情況。 (引用?matrix的幫助)。

所以,你需要array

x <- array(rep(1, 365*5*4), dim=c(365, 5, 4)) 
str(x) 
num [1:365, 1:5, 1:4] 1 1 1 1 1 1 1 1 1 1 ... 

設置的特定值:

x[305, 5, 2] <- 204 

打印一個切片:

x[305, , ] 
    [,1] [,2] [,3] [,4] 
[1,] 1 1 1 1 
[2,] 1 1 1 1 
[3,] 1 1 1 1 
[4,] 1 1 1 1 
[5,] 1 204 1 1 
+0

當然,第一個rep命令在這裏是多餘的。看到我的答案爲一個例子,你可以看到整個數組:) –

+6

@TimP它可能是多餘的,但它也明顯代表了什麼代碼。依賴於行爲或特徵R的X *可能會分散人們試圖在答案中說明的實際問題。提出這個觀點曾經增加了這個問題的整體內容。做兩次似乎很小。 –

+0

對不起,你覺得它很小,雖然哈夫洛克肯定讚賞指針 - 所以我很高興我也提到他:) –