On 10/12/2009 02:05 AM, [email protected] 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
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel