vacio - plot en r
Creando una matriz simétrica en R (4)
¿Es la solución realmente necesaria si los valores solo difieren en mucho?
Alguien señaló que mi respuesta anterior fue incorrecta. Me gustan algunos de los otros mejores, pero como no puedo eliminar este (aceptado por un usuario que se fue), aquí hay otra solución que usa el paquete micEcon
:
symMatrix(s[upper.tri(s, TRUE)], nrow=nrow(s), byrow=TRUE)
Tengo una matriz en R que se supone que es simétrica, sin embargo, debido a la precisión de la máquina, la matriz nunca es simétrica (los valores difieren en 10 ^ -16) Como sé que la matriz es simétrica, he estado haciendo esto hasta ahora para solucionar el problema:
s.diag = diag(s)
s[lower.tri(s,diag=T)] = 0
s = s + t(s) + diag(s.diag,S)
¿Hay un mejor comando de una línea para esto?
Puede forzar la matriz para que sea simétrica usando la función forceSymmetric
en el paquete Matrix
en R:
library(Matrix)
x<-Matrix(rnorm(9), 3)
> x
3 x 3 Matrix of class "dgeMatrix"
[,1] [,2] [,3]
[1,] -1.3484514 -0.4460452 -0.2828216
[2,] 0.7076883 -1.0411563 0.4324291
[3,] -0.4108909 -0.3292247 -0.3076071
A <- forceSymmetric(x)
> A
3 x 3 Matrix of class "dsyMatrix"
[,1] [,2] [,3]
[1,] -1.3484514 -0.4460452 -0.2828216
[2,] -0.4460452 -1.0411563 0.4324291
[3,] -0.2828216 0.4324291 -0.3076071
s<-matrix(1:25,5)
pmean <- function(x,y) (x+y)/2
s[] <- pmean(s, matrix(s, nrow(s), byrow=TRUE))
s
#-------
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 4 7 10 13 16
[3,] 7 10 13 16 19
[4,] 10 13 16 19 22
[5,] 13 16 19 22 25
s<-matrix(1:25,5)
s[lower.tri(s)] = t(s)[lower.tri(s)]