[R] How to make attributes persist after indexing?

Marc Schwartz (via MN) mschwartz at mn.rr.com
Wed May 24 17:30:57 CEST 2006


On Wed, 2006-05-24 at 17:20 +0100, Heinz Tuechler wrote:
> Dear All!
> 
> For descriptive purposes I would like to add attributes to objects. These
> attributes should be kept, even if by indexing only part of the object is
> used.
> I noted that some attributes like levels and class of a factor exist also
> after indexing, while others, like comment or label vanish.
> Is there a way to make an arbitrary attribute to be kept after indexing?
> This would be especially useful when indexing a data.frame.
> 
> ## example for loss of attributes
> fx <- factor(1:5, ordered=TRUE)
> attr(fx, 'comment') <- 'Comment for fx'
> attr(fx, 'label') <- 'Label for fx'
> attr(fx, 'testattribute') <- 'just for fun'
> attributes(fx)          # all attributes are shown
> attributes(fx[])        # all attributes are shown
> attributes(fx[1:5])     # only levels and class are shown
> attributes(fx[1])       # only levels and class are shown
> 
> Thanks,
> 
> Heinz Tüchler

"Non-standard" attributes do not survive the use of "[". You could
create a new class and subset method for the objects where you require
this type of functionality.

Frank Harrell has done that in the Hmisc package to support the use of
the labeling attributes, which in turn are used by some of his functions
such as latex().  You might want to review what he has done in ?label
where the "[.labelled" method has been added.

Alternatively, you could create your own function to save the
attributes, do the subsetting and then restore the attributes to the
resultant object.

HTH,

Marc Schwartz



More information about the R-help mailing list