[R] as(obj,"matrix")

John Chambers jmc at research.bell-labs.com
Wed Jul 28 17:42:43 CEST 2004


Wolski wrote:
> 
> Hi!
> 
> Here a simple example.
> 
> setClass("myclass"
> ,representation(info="character")
> ,contains="matrix"
> )
> 
> rownames(dd)<-c("a","b")
> tt<-new("myclass",dd)
> #the source of pain.
> as(tt,"matrix")<-matrix(1,3,3)
> Error: length of dimnames [1] not equal to array extent
> 
> Is there a different way to do what I would like to do (I would like to change the @.Data and all its attributes in the object)?

It's not particularly a problem with as().  Your class just doesn't
behave as you expect.

"matrix" is not a formal class with slots.  (It isn't even an S3 class
in R; attr(x,"class") is NULL.)  So you cannot expect classes extending
"matrix" to know what a matrix is supposed to be.

Part of the problem is that matrix objects sometimes have dimnames and
sometimes don't.  And there is basic code in R that assumes or applies
constraints on the "dim" or "dimnames".

In S-Plus, "matrix" is a formal class, always having a slot for
dimnames.  R has not gone that route, at least not yet.

It may be possible to define a new class, "Matrix", say, that looks like
a matrix to old-style code but has a formal definition.  But the details
are likely to be tricky, and it's definitely a topic for r-devel, not
r-help.

John Chambers

> 
> 
> Eryk.
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

-- 
John M. Chambers                  jmc at bell-labs.com
Bell Labs, Lucent Technologies    office: (908)582-2681
700 Mountain Avenue, Room 2C-282  fax:    (908)582-3340
Murray Hill, NJ  07974            web: http://www.cs.bell-labs.com/~jmc




More information about the R-help mailing list