mike at stat.ubc.ca
2009-Oct-12 00:05 UTC
[Rd] unexpected behaviour of isSymmetric() (PR#14000)
Full_Name: Mike Danilov Version: 2.9.0 OS: Fedora Core 9 Submission from: (NULL) (142.103.121.198) When checking for the symmetry of a matrix, function isSymmetric.matrix() gets confused by the discrepancy of colnames/rownames if its argument. See the code snippet below. Perhaps it's a problem of the matrix product which copies colnames of the first argument but not the rownames of the second to its value. Not sure which one should be fixed but the way it is now it seems illogical that X'X is deemed to be non-symmetric. x <- c(1,2,3) names(x) <- c("v1","v2","v3") isSymmetric(x%*%t(x)) ## returns FALSE instead of TRUE
Romain Francois
2009-Oct-12 11:41 UTC
[Rd] unexpected behaviour of isSymmetric() (PR#14000)
On 10/12/2009 02:05 AM, mike at stat.ubc.ca wrote:> > Full_Name: Mike Danilov > Version: 2.9.0 > OS: Fedora Core 9 > Submission from: (NULL) (142.103.121.198) > > > When checking for the symmetry of a matrix, function isSymmetric.matrix() gets > confused by the discrepancy of colnames/rownames if its argument. See the code > snippet below. Perhaps it's a problem of the matrix product which copies > colnames of the first argument but not the rownames of the second to its value. > Not sure which one should be fixed but the way it is now it seems illogical that > X'X is deemed to be non-symmetric. > > x<- c(1,2,3) > names(x)<- c("v1","v2","v3") > isSymmetric(x%*%t(x)) ## returns FALSE instead of TRUEIt seems to be concerned with the names > y <- x %*% t(x) > y v1 v2 v3 [1,] 1 2 3 [2,] 2 4 6 [3,] 3 6 9 > isSymmetric( y ) [1] FALSE # dropping the dimnames > isSymmetric( structure( y, dimnames = NULL ) ) [1] TRUE # pass the ... along this path : isSymmetric > all.equal > all.equal.numeric > isSymmetric( y, check.attributes = F ) [1] TRUE # set the dimnames equal > dimnames( y ) <- rep( list( names(x) ), 2 ) > isSymmetric( y ) [1] TRUE Not sure this is expected behaviour Romain -- Romain Francois Professional R Enthusiast +33(0) 6 28 91 30 30 http://romainfrancois.blog.free.fr |- http://tr.im/BcPw : celebrating R commit #50000 |- http://tr.im/ztCu : RGG #158:161: examples of package IDPmisc `- http://tr.im/yw8E : New R package : sos