Patrick Aboyoun
2009-Aug-17 17:52 UTC
[Rd] Base "Object" class to use in S4 slot specification
I am looking to have slot in an S4 class definition that can take any (S3 or S4) object. The ANY class seemed to be a good candidate, but the is() function definition performs an S3Case test before checking if methods:::.identC(class2, "ANY"). The result is the is() function does not consider various S3 objects to be of class ANY. > is(factor(), "ANY") [1] FALSE > is(lm(I(1:10) ~ rnorm(10)), "ANY") [1] FALSE > sessionInfo() R version 2.10.0 Under development (unstable) (2009-08-05 r49073) i386-apple-darwin9.7.0 locale: [1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods base What is the recommended base "Object" class I should define my slot to be so it can accept any object? Patrick
Patrick Aboyoun
2009-Sep-08 16:14 UTC
[Rd] Reissue: Base "Object" class to use in S4 slot specification
This is a reissue of a question I had asked a few weeks ago to see if anyone had any thoughts on the matter. I am looking to have slot in an S4 class definition that can take any (S3 or S4) object. The ANY class seemed to be a good candidate, but the is() function definition performs an S3Case test before checking if methods:::.identC(class2, "ANY"). The result is the is() function does not consider various S3 objects to be of class ANY. > is(factor(), "ANY") [1] FALSE > is(lm(I(1:10) ~ rnorm(10)), "ANY") [1] FALSE > sessionInfo() R version 2.10.0 Under development (unstable) (2009-09-07 r49613) i386-apple-darwin9.8.0 locale: [1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods base What is the recommended base "Object" class I should define my slot to be so it can accept any object? Patrick
Simon Urbanek
2009-Sep-08 16:39 UTC
[Rd] Reissue: Base "Object" class to use in S4 slot specification
On Sep 8, 2009, at 12:14 , Patrick Aboyoun wrote:> This is a reissue of a question I had asked a few weeks ago to see > if anyone had any thoughts on the matter. > > I am looking to have slot in an S4 class definition that can take > any (S3 or S4) object. The ANY class seemed to be a good candidate, > but the is() function definition performs an S3Case test before > checking if methods:::.identC(class2, "ANY"). The result is the is() > function does not consider various S3 objects to be of class ANY. >Yes, but how is that relevant to your question? A slot defined as "ANY" will accept any type in R: > setClass("foo",representation(a="ANY")) [1] "foo" > new("foo",a=factor()) An object of class "foo" Slot "a": factor(0) Levels: "ANY" is not an S4 class (and neither are various other types in R), so is() correctly returns FALSE. Cheers, Simon> > is(factor(), "ANY") > [1] FALSE > > is(lm(I(1:10) ~ rnorm(10)), "ANY") > [1] FALSE > > sessionInfo() > R version 2.10.0 Under development (unstable) (2009-09-07 r49613) > i386-apple-darwin9.8.0 > > locale: > [1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8 > > attached base packages: > [1] stats graphics grDevices utils datasets methods base > What is the recommended base "Object" class I should define my slot > to be so it can accept any object? > > > > Patrick > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > >
Simon Urbanek
2009-Sep-08 16:44 UTC
[Rd] Reissue: Base "Object" class to use in S4 slot specification
On Sep 8, 2009, at 12:39 , Simon Urbanek wrote:> > On Sep 8, 2009, at 12:14 , Patrick Aboyoun wrote: > >> This is a reissue of a question I had asked a few weeks ago to see >> if anyone had any thoughts on the matter. >> >> I am looking to have slot in an S4 class definition that can take >> any (S3 or S4) object. The ANY class seemed to be a good candidate, >> but the is() function definition performs an S3Case test before >> checking if methods:::.identC(class2, "ANY"). The result is the >> is() function does not consider various S3 objects to be of class >> ANY. >> > > Yes, but how is that relevant to your question? A slot defined as > "ANY" will accept any type in R: > > > setClass("foo",representation(a="ANY")) > [1] "foo" > > new("foo",a=factor()) > An object of class "foo" > Slot "a": > factor(0) > Levels: > > "ANY" is not an S4 class (and neither are various other types in R), > so is() correctly returns FALSE. >Ok, sorry, the last sentence is false - "ANY" is a virtual S4 class, so it will return TRUE for S4 classes and FALSE for any other object. Cheers, Simon> > >> > is(factor(), "ANY") >> [1] FALSE >> > is(lm(I(1:10) ~ rnorm(10)), "ANY") >> [1] FALSE >> > sessionInfo() >> R version 2.10.0 Under development (unstable) (2009-09-07 r49613) >> i386-apple-darwin9.8.0 >> >> locale: >> [1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8 >> >> attached base packages: >> [1] stats graphics grDevices utils datasets methods base >> What is the recommended base "Object" class I should define my slot >> to be so it can accept any object? >> >> >> >> Patrick >> >> ______________________________________________ >> R-devel at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> >> >