假設我有一個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
假設我有一個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
可能更有效,而聲明矩陣作爲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
的每一行中的索引組。
或者你可以使用'blank [cbind(c(2,9, 1),c(5,3,4))] < - NA' –
@docendodiscimus這是更好的(更可編程),我會加入它。謝謝,我的索引技能缺乏。 – MichaelChirico
'do.call(rbind,這個列表/ do.call/rbind操作肯定比看起來更笨拙。 –
如果這應該是NA到零矩陣的隨機分配,那麼這可能就足夠了。
zero3NA <- matrix(0, 10, 10)
zero3NA[ cbind(sample(nrow(zero3NA), 3), sample(ncol(zero3NA), 3)) ] <- NA
爲了給你的marix填零,只需做blank [] < - 0'。關於「NA」,這裏還是有一些規則,或者只有隨機單元?如果沒有後面的算法,你可能需要單獨做每一個 –
感謝更簡單的方法,是的,它們是隨機的 – dasf