poligono para pairs librerias graficos grafico graficas graficar grafica ejemplos cuadricula animados r matrix assign

para - poligono en r



Asignar valor a entradas diagonales de matriz (2)

Necesito acceder y asignar ranuras únicas de una matriz m * n dentro de un bucle for. El código hasta el momento:

rowCount <- 9 similMatrix = matrix(nrow = rowCount - 1, ncol = rowCount) show(similMatrix) for(i in (rowCount - 1)){ for (j in rowCount) if (i == j){ similMatrix[i == j] <- 0; } } show(similMatrix)

entonces si i = j, el valor de NA en la matriz necesita ser reemplazado por 0.


Desea la función diag<-

m <- matrix(1:12, nrow=3) m [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 diag(m) <- 0 m [,1] [,2] [,3] [,4] [1,] 0 4 7 10 [2,] 2 0 8 11 [3,] 3 6 0 12


Con el fin de establecer los elementos "diagonales" a cero, ya se te ha dado una respuesta, pero me pregunto si esperabas algo más general. Las razones de la falta de éxito con ese código eran dobles: la construcción de sus índices era defectuosa y la indexación era incorrecta. Esto hubiera tenido éxito:

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

Pero recurrir a bucles en R generalmente se considera un último recurso (a veces por las razones equivocadas). Hay una forma mucho más compacta de hacer la misma operación de "bucle" y se generaliza más que simplemente establecer la diagonal.

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

Si quisiera establecer la subdiagonal a cero, podría usar:

similMatrix[ row(similMatrix)-1 == col(similMatrix) ] <- 0

Puede evitar generar las matrices de fila y col adicionales usando esto:

mind <- min( dim(similMatrix) ) # avoid going outside dimensions if not symmetric similMatrix[ cbind( seq(maxd),seq(maxd) ) <- 0