Por ejemplo, tengo dos matrices y quiero saber si son idénticas en cada elemento.

mymatrix<-Matrix(rnorm(20),ncol=5)
mysvd<-svd(mymatrix) 
newmatrix<-mysvd$u %*% diag(mysvd$d) %*% t(mysvd$v)

He utilizado los siguientes métodos para la comparación:

identical(Matrix(newmatrix), mymatrix)
all.equal(Matrix(newmatrix), mymatrix)

Por qué la primera no devuelve VERDADERO?
No importa yo uso de la Matriz de la matriz de paquete o de la matriz de la base del paquete

OriginalEl autor Tyler 十三将士归玉门 | 2014-04-12

4 Comentarios

  1. 7

    Tratar el siguiente:

    > dput(Matrix(newmatrix))
    new("dgeMatrix"
        , x = c(-0.705193264426589, 0.68023073271425, 0.0726318059033283, -0.111055227906436, 
    -0.113940777963113, 0.726463241417717, -0.343435098646076, 0.885225942372688, 
    -0.549848405897803, -0.0227469387867766, -0.927524398860002, 
    0.58047674424687, 0.521144348439824, 0.279602090928527, -1.31686400403363, 
    0.906874499735628, -0.276997805548975, 0.632960950203858, 0.453881309098762, 
    -0.00528540521655077)
        , Dim = 4:5
        , Dimnames = list(NULL, NULL)
        , factors = list()
    )
    
    > dput(newmatrix)
    structure(c(-0.705193264426589, 0.68023073271425, 0.0726318059033283, 
    -0.111055227906436, -0.113940777963113, 0.726463241417717, -0.343435098646076, 
    0.885225942372688, -0.549848405897803, -0.0227469387867766, -0.927524398860002, 
    0.58047674424687, 0.521144348439824, 0.279602090928527, -1.31686400403363, 
    0.906874499735628, -0.276997805548975, 0.632960950203858, 0.453881309098762, 
    -0.00528540521655077), .Dim = 4:5)

    Claramente estos no son las mismas estructuras de datos.

    OriginalEl autor G. Grothendieck

  2. 6

    Que no son exactamente iguales (por identical) debido a diferencias muy pequeñas:

    > max(abs(Matrix(newmatrix) - mymatrix))
    [1] 1.110223e-15

    pero estas diferencias son menores que el valor predeterminado tolerance dentro de all.equal:

    > .Machine$double.eps ^ 0.5
    [1] 1.490116e-08

    así identical volverá FALSE y all.equal volverá TRUE.

    OriginalEl autor flodel

  3. 2

    El primero que se están comparando:

    > Matrix(newmatrix)
    4 x 5 Matrix of class "dgeMatrix"
               [,1]       [,2]       [,3]        [,4]       [,5]
    [1,]  0.5052901 -0.3264201 -0.8576401 -0.62666359  2.1076090
    [2,]  0.2356111  0.4911067 -1.2376674  1.11231840  0.8576557
    [3,] -0.6244670  1.4423943 -1.2820541 -0.05297437 -2.0458810
    [4,] -0.2669079  1.1218459  0.6371571 -0.52168139  0.2163623

    con:

    > mymatrix
               [,1]       [,2]       [,3]        [,4]       [,5]
    [1,]  0.5052901 -0.3264201 -0.8576401 -0.62666359  2.1076090
    [2,]  0.2356111  0.4911067 -1.2376674  1.11231840  0.8576557
    [3,] -0.6244670  1.4423943 -1.2820541 -0.05297437 -2.0458810
    [4,] -0.2669079  1.1218459  0.6371571 -0.52168139  0.2163623

    Y si usted lee la ayuda para identical puede ver: The safe and reliable way to test two objects for being _exactly_ equal. estás comparando un Matrix-objeto de la clase con una R matriz estándar de objetos. Son muy diferentes. Incluso dos objetos con diferentes atributos no ser idénticos:

    > x
    a b c d 
    1 2 3 4 
    > y
    [1] 1 2 3 4
    > x==y
       a    b    c    d 
    TRUE TRUE TRUE TRUE 
    > identical(x,y)
    [1] FALSE

    OriginalEl autor Spacedman

  4. -2

    Puede verificar si 2 matrices son iguales (idénticos) o no se como sigue.

    Supongamos que tienes 2 matrices, newMatrix y oldMatrix, que podría ser de cualquier dimensión.

    which (which (newMatrix == oldMatrix) == FALSE) volverá integer (0) si las dos matrices son idénticas.

    OriginalEl autor Saket Shrivastava

Dejar respuesta

Please enter your comment!
Please enter your name here