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

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

Reply via email to