[Rd] attributes of S4 objects
fparlamis at mac.com
Thu Sep 14 08:07:53 CEST 2006
I am having a bit of a struggle deciding when to use attributes with
S4 objects. Clearly the 'class' attribute will always be present.
But it is not clear to me whether the architects of the methods
package intend that other attributes, such as 'names', will still be
used when the S4 implementation is complete.
I notice that, when you create a formal object from an informal one
with attributes, the attributes are (often) assigned to the formal
object. For example,
vec <- 1:10
names(vec) <- letters[1:10]
comment(vec) <- "comment"
Vec <- new("Numeric", vec)
attributes(Vec) ## 'names' and 'comment' attributes are assigned to
the formal object
But I also notice that, in the absence of an appropriate 'coerce'
method, 'as( , superclass)' will return an object without attributes
as(Vec, "numeric") ## gives an unnamed vector of mode numeric with no
Because of this, I have found myself writing methods for the sole
purpose of preserving attributes when coercing between basic data
types and formal classes that extend them. But the default methods
for coercing to the basic data types clearly want attributes to be
stripped (they do so explicitly when strict=TRUE (the default)). I
am thinking that maybe it was always intended that non-class
attributes would not be used with formal objects, and that instead
analogous slots would appear in any formal objects that extend basic
data types (like the Dim and Dimnames attributes in the 'Matrix'
mother class from the Matrix package).
Is that true? Are attributes un-S4? Any and all style advice or
examples would be appreciated.
More information about the R-devel