From romain.francois at dbmail.com  Mon Oct 12 13:41:19 2009
From: romain.francois at dbmail.com (Romain Francois)
Date: Mon, 12 Oct 2009 13:41:19 +0200
Subject: [Rd] unexpected behaviour of isSymmetric() (PR#14000)
In-Reply-To: <20091012000511.C97B2282EF50@mail.pubhealth.ku.dk>
References: <20091012000511.C97B2282EF50@mail.pubhealth.ku.dk>
Message-ID: <4AD315DF.9050702@dbmail.com>

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 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



[Rd] unexpected behaviour of isSymmetric() (PR#14000)
Romain Francois