[Rd] Named class vector

Kurt Hornik Kurt@Horn|k @end|ng |rom wu@@c@@t
Thu Nov 5 15:40:50 CET 2020

>>>>> 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")


> Comments would be welcome.

> Duncan Murdoch

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

More information about the R-devel mailing list