[R] don't print object attributes
Duncan Murdoch
murdoch.duncan at gmail.com
Tue Aug 28 21:05:59 CEST 2012
On 28/08/2012 2:16 PM, Liviu Andronic wrote:
> On Tue, Aug 28, 2012 at 7:34 PM, Duncan Murdoch
> <murdoch.duncan at gmail.com> wrote:
> > Assign a class to the object, and write a print method for it.
> >
> > For example, this doesn't quite do what you want, but it's a start:
> >
> > print.noattributes <- function(x, ...) {
> > attributes(x) <- NULL
> > print(x)
> > }
> >
> > class(x) <- "noattributes"
> > x
> >
> > It loses some attributes that you probably want to keep (e.g. the names),
> > but otherwise works on your example.
> >
> I've already tried this solution but that's exactly the trouble with
> this approach. Do this on a data.frame and loses important
> information.
>
> I came up with a modified version of the above:
> print_noattr <- function(x, keep.some=T, ...){
> if(keep.some) xa <- attributes(x)[c('names', 'row.names', 'class')]
> attributes(x) <- NULL
> if(keep.some) attributes(x) <- xa
> print(x)
> }
>
> > x <- dlply(iris, .(Species), function(x) describe(x[, 'Sepal.Length']))
> > print_noattr(x)
> $setosa
> x[, "Sepal.Length"]
> n missing unique Mean .05 .10 .25 .50 .75
> 50 0 15 5.006 4.40 4.59 4.80 5.00 5.20
> .90 .95
> 5.41 5.61
>
> 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5 5.1 5.2 5.3 5.4 5.5 5.7 5.8
> Frequency 1 3 1 4 2 5 4 8 8 3 1 5 2 2 1
> % 2 6 2 8 4 10 8 16 16 6 2 10 4 4 2
>
> $versicolor
> x[, "Sepal.Length"]
> n missing unique Mean .05 .10 .25 .50 .75
> 50 0 21 5.936 5.045 5.380 5.600 5.900 6.300
> .90 .95
> 6.700 6.755
>
> lowest : 4.9 5.0 5.1 5.2 5.4, highest: 6.6 6.7 6.8 6.9 7.0
>
> $virginica
> x[, "Sepal.Length"]
> n missing unique Mean .05 .10 .25 .50 .75
> 50 0 21 6.588 5.745 5.800 6.225 6.500 6.900
> .90 .95
> 7.610 7.700
>
> lowest : 4.9 5.6 5.7 5.8 5.9, highest: 7.3 7.4 7.6 7.7 7.9
>
>
> However this still feels like a hack, and the function should be
> modified if the object in question contains some other crucial
> attributes.
I think it's reasonable to say it feels like a hack, because it is. x
should have had a class and a print method for that class in the first
place, if the attributes are not something that users should see. If
they are things you should see, then suppressing them is a bad idea.
Duncan Murdoch
>
>
>
> On Tue, Aug 28, 2012 at 7:44 PM, Peter Ehlers <ehlers at ucalgary.ca> wrote:
> > It seems that class "listof" also works:
> >
> > class(x) <- "listof"
> > x
> >
> This works great. Thanks.
>
> Liviu
More information about the R-help
mailing list