On 10/12/2009 02:05 AM, m...@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 TRUE

It 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

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to