Ответ 1
Для того, чтобы установить "диагональные" элементы в ноль, вам уже дали ответ, но мне интересно, надеетесь ли вы на что-то более общее. Причины отсутствия успеха с этим кодом были в два раза: построение ваших индексов было ошибочным, а индексация была неправильной. Это сработало бы:
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
Вы можете избежать генерации дополнительных строк и col-матриц, используя это:
mind <- min( dim(similMatrix) )
# avoid going outside dimensions if not symmetric
similMatrix[ cbind( seq(maxd),seq(maxd) ) <- 0