爲目的將「對角線」元素設置爲零,你已經得到了答案,但我想知道你是否希望得到更一般的東西。該代碼缺乏成功的原因有兩方面:你的索引的構建有缺陷,並且索引是錯誤的。這將成功:
for(i in 1:(rowCount - 1)){ # need an expression that retruns a sequence
for (j in 1:rowCount) # ditto
if (i == j){
similMatrix[i,j] <- 0; # need to index the matrix with two element if using i,j
}
}
#----------
> show(similMatrix)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 0 NA NA NA NA NA NA NA NA
[2,] NA 0 NA NA NA NA NA NA NA
[3,] NA NA 0 NA NA NA NA NA NA
[4,] NA NA NA 0 NA NA NA NA NA
[5,] NA NA NA NA 0 NA NA NA NA
[6,] NA NA NA NA NA 0 NA NA NA
[7,] NA NA NA NA NA NA 0 NA NA
[8,] NA NA NA NA NA NA NA 0 NA
但訴諸於R鍵循環通常被認爲是最後的手段有做同樣的「循環」操作的更加緊湊的方式,它概括(有時錯誤的原因。)比設定對角線更廣泛。
similMatrix[ row(similMatrix) == col(similMatrix) ] <- 0
> similMatrix
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 0 NA NA NA NA NA NA NA NA
[2,] NA 0 NA NA NA NA NA NA NA
[3,] NA NA 0 NA NA NA NA NA NA
[4,] NA NA NA 0 NA NA NA NA NA
[5,] NA NA NA NA 0 NA NA NA NA
[6,] NA NA NA NA NA 0 NA NA NA
[7,] NA NA NA NA NA NA 0 NA NA
[8,] NA NA NA NA NA NA NA 0 NA
如果你想設置的次對角爲零,你可以只使用:
similMatrix[ row(similMatrix)-1 == col(similMatrix) ] <- 0
可避免產生多餘的行和使用列矩陣這樣的:
mind <- min(dim(similMatrix))
# avoid going outside dimensions if not symmetric
similMatrix[ cbind(seq(maxd),seq(maxd)) <- 0
你是不是獲得期望的輸出? –