I'm trying to understand the R internals a bit better and reading over the documentation. I see that there is a bit related to whether an object is S4 (S4_OBJECT_MASK), and also the object type S4SXP (25). The documentation makes clear that these two things aren't the same. But in practice, will the S4-bit and object type ever disagree for S4 objects? I know that one can set the bit manually in C; are there any practical applications for doing so? Thank you Travers [[alternative HTML version deleted]]
Yes, any object of a class that derives from a basic type, like an atomic vector for example, will be of the basic SEXP type, with the S4 bit set. This means that a class can extend "integer" and objects of that class can be treated as any ordinary integer vector. S4SXP is only for objects that do not derive from another basic type. Michael On Tue, Oct 22, 2019 at 1:28 AM Travers Ching <traversc at gmail.com> wrote:> > I'm trying to understand the R internals a bit better and reading over the > documentation. > > I see that there is a bit related to whether an object is S4 > (S4_OBJECT_MASK), and also the object type S4SXP (25). The documentation > makes clear that these two things aren't the same. > > But in practice, will the S4-bit and object type ever disagree for S4 > objects? I know that one can set the bit manually in C; are there any > practical applications for doing so? > > Thank you > Travers > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel-- Michael Lawrence Scientist, Bioinformatics and Computational Biology Genentech, A Member of the Roche Group Office +1 (650) 225-7760 michafla at gene.com Join Genentech on LinkedIn | Twitter | Facebook | Instagram | YouTube
Hi Travers, Just an additional remarks to Michael's answer, if your S4 class inherits from R's basic types, say integer, the resulting object will be an INTSXP. If your S4 class does not inherit from any class, it will be an S4SXP. You can think about this question from the object-oriented framework: If one class inherits the integer class, what should R do to make all the integer related functions compatible with the new class at C level? Best, Jiefei On Tue, Oct 22, 2019 at 4:28 AM Travers Ching <traversc at gmail.com> wrote:> I'm trying to understand the R internals a bit better and reading over the > documentation. > > I see that there is a bit related to whether an object is S4 > (S4_OBJECT_MASK), and also the object type S4SXP (25). The documentation > makes clear that these two things aren't the same. > > But in practice, will the S4-bit and object type ever disagree for S4 > objects? I know that one can set the bit manually in C; are there any > practical applications for doing so? > > Thank you > Travers > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >[[alternative HTML version deleted]]
Thanks you Jiefei and Michael! Travers On Tue, Oct 22, 2019 at 8:14 AM Wang Jiefei <szwjf08 at gmail.com> wrote:> Hi Travers, > > Just an additional remarks to Michael's answer, if your S4 class inherits > from R's basic types, say integer, the resulting object will be an INTSXP. > If your S4 class does not inherit from any class, it will be an S4SXP. You > can think about this question from the object-oriented framework: If one > class inherits the integer class, what should R do to make all the integer > related functions compatible with the new class at C level? > > Best, > Jiefei > > On Tue, Oct 22, 2019 at 4:28 AM Travers Ching <traversc at gmail.com> wrote: > >> I'm trying to understand the R internals a bit better and reading over the >> documentation. >> >> I see that there is a bit related to whether an object is S4 >> (S4_OBJECT_MASK), and also the object type S4SXP (25). The documentation >> makes clear that these two things aren't the same. >> >> But in practice, will the S4-bit and object type ever disagree for S4 >> objects? I know that one can set the bit manually in C; are there any >> practical applications for doing so? >> >> Thank you >> Travers >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-devel at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> >[[alternative HTML version deleted]]
Possibly Parallel Threads
- S4SXP type vs S4 object bit?
- SUGGESTION: Settings to disable forked processing in R, e.g. parallel::mclapply()
- Objectsize function visiting every element for alt-rep strings
- Object.size() should not visit every element for alt-rep strings, or there should be an altstring_objectsize_method
- SUGGESTION: Settings to disable forked processing in R, e.g. parallel::mclapply()