From Kurt@Horn|k @end|ng |rom wu@@c@@t  Thu Nov  5 15:40:50 2020
From: Kurt@Horn|k @end|ng |rom wu@@c@@t (Kurt Hornik)
Date: Thu, 5 Nov 2020 15:40:50 +0100
Subject: [Rd] Named class vector
In-Reply-To: <fc627157-1e84-31d2-18d4-c8105ac05e42@gmail.com>
References: <fc627157-1e84-31d2-18d4-c8105ac05e42@gmail.com>
Message-ID: <24484.3826.756259.583705@hornik.net>

>>>>> Duncan Murdoch writes:

> The source to the noquote() function looks like this:
> noquote <- function(obj, right = FALSE) {
>      ## constructor for a useful "minor" class
>      if(!inherits(obj,"noquote"))
>          class(obj) <- c(attr(obj, "class"),
>                          if(right) c(right = "noquote") else "noquote")
>      obj
> }

> Notice what happens with right = TRUE:

>> x <- noquote("a", right = TRUE)
>> x
> [1] a
>> class(x)
>      right
> "noquote"

> The class vector for x is named.  The print method pays attention to the 
> name, so we get different behaviour for a class of "noquote" and a class 
> of c(right = "noquote").

> I had never noticed a named class vector before, and it raised some 
> questions for me:

> - Is this used anywhere else?

Not that I'd be aware of: I think MMae is the expert here.

> - Are names preserved in all the operations normally done on a class 
> vector?  (As far as I can see they are, but maybe I've missed something.)
> - Is it a good idea to encode a string value worth of information in the 
> name, rather than setting the class to something like c("noquote", 
> "right") instead?

My preference would be to have unnamed class vectors, so that the names
could perhaps eventually be used to store the name of the package which
owns the class.  For noquote, I guess you'd want something like

  c("noquote_right", "noquote")

Best
-k

> Comments would be welcome.

> Duncan Murdoch

> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] Named class vector
Kurt Hornik