2016-01-14 88 views
1

假設我有一個10x10矩陣。我怎樣才能用0填充它,同時排除某些單獨的單元格(最好在單個操作中)?R:將函數應用於矩陣,除了單個單元格

blank <- matrix(NA,nrow=10,ncol=10) 
for (i in 1:10) {for (j in 1:10) {blank[i,j] <- 0 }} 
# except blank[2,5], blank[9,3], blank[1,4], to be left NA 
+2

爲了給你的marix填零,只需做blank [] < - 0'。關於「NA」,這裏還是有一些規則,或者只有隨機單元?如果沒有後面的算法,你可能需要單獨做每一個 –

+0

感謝更簡單的方法,是的,它們是隨機的 – dasf

回答

2

可能更有效,而聲明矩陣作爲0和分配NA s到少數例外細胞:

blank <- matrix(0, nrow = 10, ncol = 10) 
blank[2, 5] <- blank[9, 3] <- blank[1, 4] <- NA 

或者,更可編程:

coords <- list(c(2, 5), 
       c(9, 3), 
       c(1, 4)) 

blank[do.call("rbind", coords)] <- NA 

(關鍵是?"["的這一部分):

當通過[對數組進行索引時,單個參數i可以是一個具有許多列的矩陣,其尺寸爲x;那麼結果是一個矢量,其元素對應於i的每一行中的索引組。

+4

或者你可以使用'blank [cbind(c(2,9, 1),c(5,3,4))] < - NA' –

+0

@docendodiscimus這是更好的(更可編程),我會加入它。謝謝,我的索引技能缺乏。 – MichaelChirico

+1

'do.call(rbind,這個列表/ do.call/rbind操作肯定比看起來更笨拙。 –

1

如果這應該是NA到零矩陣的隨機分配,那麼這可能就足夠了。

zero3NA <- matrix(0, 10, 10) 
zero3NA[ cbind(sample(nrow(zero3NA), 3), sample(ncol(zero3NA), 3)) ] <- NA 
相關問題