[Rd] package methods different behaviour R1.9.1 patched and R2.0.0
Wolski
wolski at molgen.mpg.de
Tue Sep 7 16:58:25 CEST 2004
Hello!
A simple example.
setClass("myclass"
,representation(info="character")
,contains="matrix"
)
setAs("myclass","vector"
,def=function(from)
{
print("enters?")
to<-summary(from[,1])
to<-as.vector(to)
to
}
)
#init
dd<-matrix(1:6,nrow=2)
rownames(dd)<-c("a","b")
tt<-new("myclass",dd)
class(tt)
as(tt,"vector")
summary(dd[,1])
What I expect.
R : Copyright 2004, The R Foundation for Statistical Computing
Version 1.9.1 Patched (2004-08-30), ISBN 3-900051-00-3
> class(tt)
[1] "myclass"
attr(,"package")
[1] ".GlobalEnv"
> as(tt,"vector")
[1] "enters?"
[1] 1.00 1.25 1.50 1.50 1.75 2.00
> summary(dd[,1])
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.00 1.25 1.50 1.50 1.75 2.00
R : Copyright 2004, The R Foundation for Statistical Computing
Version 2.0.0 Under development (unstable) (2004-09-06), ISBN 3-900051-07-0
> class(tt)
[1] "myclass"
attr(,"package")
[1] ".GlobalEnv"
> as(tt,"vector")
[1] 1 2 3 4 5 6
> summary(dd[,1])
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.00 1.25 1.50 1.50 1.75 2.00
Yours
Eryk
*********** REPLY SEPARATOR ***********
On 9/7/2004 at 10:34 AM John Chambers wrote:
>>>It's not possible to tell what you're expecting or actually seeing
>>>from
>>>this mail. We need to see your code and the results, not your
>>>interpretation of how as() is implemented.
>>>
>>>Meanwhile, here's how a simple class that extends "matrix" works in
>>>2.0.0
>>>
>>>With the code:
>>>
>>> setClass("mat1", representation(id="character"), contains = "matrix")
>>>
>>> mm <- matrix(1:12,3,4)
>>>
>>> mmm <- new("mat1", mm, id = "numeric")
>>>
>>>The result is:
>>>
>>>R> as(mmm, "vector")
>>> [1] 1 2 3 4 5 6 7 8 9 10 11 12
>>>
>>>Class "vector" is one of the basic R classes; as explained in ?as, the
>>>methods for these use the exisiting as.<class> functions, as.vector in
>>>this case.
>>>
>>>The result is indeed the same as coercing mmm to "matrix" first and then
>>>to vector
>>>
>>>R> as(as(mmm, "matrix"), "vector")
>>> [1] 1 2 3 4 5 6 7 8 9 10 11 12
>>>
>>>as one would expect, but the method for coercing class "mat1" does not
>>>go through "matrix":
>>>
>>>R> selectMethod("coerce", c("mat1", "vector"))
>>>function (from, to, strict = TRUE)
>>>{
>>> value <- as.vector(from)
>>> if (strict)
>>> attributes(value) <- NULL
>>> value
>>>}
>>><environment: namespace:methods>
>>>
>>>
>>>
>>>Wolski wrote:
>>>>
>>>> Hi!
>>>>
>>>> Concerning different behaviour between 1.9.1 patched and:
>>>> R : Copyright 2004, The R Foundation for Statistical Computing
>>>> Version 2.0.0 Under development (unstable) (2004-09-06), ISBN
>>>3-900051-07-0
>>>>
>>>> Subtitle:
>>>> as(x,"vector"); x is of class "Massvector"; never enters
>>>setAs("Massvector","vector"...
>>>>
>>>> The same code:
>>>>
>>>> as(mvl[[1]],"vector")
>>>> causes under R1.9.1 to enter the function
>>>> setAs("Massvector","vector"
>>>> ,function(from)
>>>> ...
>>>>
>>>> This never happens under R2.0.0.
>>>>
>>>> The class "Massvector" contains class "Matrix"
>>>>
>>>> A phenomenological description of what happens instead with R2.0.0 is
>>>>
>>>> as(as(mvl[[1]],"Matrix"),"vector")
>>>>
>>>> and its not what I would expect.
>>>>
>>>> Is this an intended behaviour in R2.0.0?
>>>>
>>>> /E
>>>>
>>>> ______________________________________________
>>>> R-devel at stat.math.ethz.ch mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>>--
>>>John M. Chambers
>>>Bell Labs, Lucent Technologies office: (908)582-2681
>>>700 Mountain Avenue, Room 2C-282 fax: (908)582-3340
>>>Murray Hill, NJ 07974
Dipl. bio-chem. Witold Eryk Wolski @ MPI-Moleculare Genetic
Ihnestrasse 63-73 14195 Berlin 'v'
tel: 0049-30-83875219 / \
mail: witek96 at users.sourceforge.net ---W-W---- http://www.molgen.mpg.de/~wolski
wolski at molgen.mpg.de
More information about the R-devel
mailing list