On Jan 3, 2014, at 9:46 AM, Hadley Wickham <h.wick...@gmail.com> wrote:
> On Thu, Jan 2, 2014 at 7:16 PM, Henrik Bengtsson <h...@biostat.ucsf.edu> > wrote: >> Does it make sense to talk about the class of the output of >> substitute(...)? I'm puzzled by the following outputs: >> >> ee <- list( >> A = substitute( a <- 1 ), >> B = substitute({ a <- 1 }), >> C = substitute(( a <- 1 )), >> D = substitute( a == 1 ) >> ) >> >>> t(sapply(ee, FUN=function(e) { c(typeof=typeof(e), mode=mode(e), >>> class=class(e)) })) >> typeof mode class >> A "language" "call" "<-" >> B "language" "call" "{" >> C "language" "(" "(" >> D "language" "call" "call" >> >> That the mode in C is "(", is motivated in help("mode"): "that some >> calls have mode "(" which is S compatible." However, what's the >> explanation for the different classes? Is that intended or just >> "garbage" output? > > ?class has: > > "Many R objects have a class attribute, a character vector giving the > names of the classes from which the object inherits. If the object > does not have a class attribute, it has an implicit class, "matrix", > "array" or the result of mode(x) (except that integer vectors have > implicit class "integer"). (Functions oldClass and oldClass<- get and > set the attribute, which can also be done directly.)" > > which suggests either a bug or some tweaks are needed to the documentation. Definitely not the former. What happens is easy enough to see, if you follow the definition of the .Primitive. Routine R_data_class in attrib.c does the computation. When there is no class attribute, it supplies the definition for "matrix" and "array", turns the 3 types for functions into "function", and distinguishes among objects of type "language" to give specific classes to the syntactic functions called, such as `while`(), `if`(), etc. It does seem that the documentation should say something similar. John > > Is there any point in ever using mode() except for S+ compatibility? > It just adds some confusing aliases on top of typeof. > > Hadley > > -- > http://had.co.nz/ > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel