From murdoch@dunc@n @end|ng |rom gm@||@com  Thu Nov  5 15:00:40 2020
From: murdoch@dunc@n @end|ng |rom gm@||@com (Duncan Murdoch)
Date: Thu, 5 Nov 2020 09:00:40 -0500
Subject: [Rd] Named class vector
Message-ID: <fc627157-1e84-31d2-18d4-c8105ac05e42@gmail.com>

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?
- 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?

Comments would be welcome.

Duncan Murdoch



[Rd] Named class vector
Duncan Murdoch