Ai fini della impostando gli elementi "diagonali" a zero ti è già stata data una risposta, ma mi chiedo se stavi sperando in qualcosa di più generale. Le ragioni della mancanza di successo con quel codice erano duplici: la costruzione dei tuoi indici era errata e l'indicizzazione era sbagliata. Questo sarebbe riuscito:
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
Ma ricorrere a cicli in R è generalmente considerata l'ultima risorsa C'è un modo molto più compatto di fare la stessa operazione "loop" e generalizza (a volte per le ragioni sbagliate.) più ampiamente della semplice impostazione della diagonale.
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
Se si volesse impostare il sotto la diagonale a zero si potrebbe utilizzare:
similMatrix[ row(similMatrix)-1 == col(similMatrix) ] <- 0
si può evitare la generazione di riga in più e matrici Col utilizzare questo:
mind <- min(dim(similMatrix))
# avoid going outside dimensions if not symmetric
similMatrix[ cbind(seq(maxd),seq(maxd)) <- 0
Non sei ottenendo l'output desiderato? –