[Rd] Named class vector

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Thu Nov 5 15:00:40 CET 2020


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



More information about the R-devel mailing list