機能が欲しいです"対角"要素をゼロに設定すると、すでに回答が得られていますが、もっと一般的なものを望んでいるのだろうかと思います。そのコードで成功しなかった理由は2つありました。インデックスの構築に欠陥があり、インデックス作成が間違っていました。これが成功しただろう:
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
はあなたではありません希望の出力を得る? –