When used as an index, the factor is implicitly converted to integer. In the expression as.numeric(levels(f))[f], the vector as.numeric(levels(f)) is indexed by as.integer(f).
This appears to rely on the current implementation, as mentioned in section 2.3.1 of the language definition. On Mon, Apr 1, 2013 at 1:49 PM, Peter Ehlers <ehl...@ucalgary.ca> wrote: > On 2013-04-01 10:48, Matthew Lundberg wrote: > >> These two seem to be at odds. Is this the case? >> >> From help(factor) - section Warning: >>> >> >> To transform a factor f to approximately its original numeric values, >> as.numeric(levels(f))[f] is recommended and slightly more efficient than >> as.numeric(as.character(f)). >> >> From the language definition - section 2.3.1: >>> >> >> Factors are currently implemented using an integer array to specify the >> actual levels and >> a second array of names that are mapped to the integers. Rather >> unfortunately users often >> make use of the implementation in order to make some calculations easier. >> This, however, >> is an implementation issue and is not guaranteed to hold in all >> implementations of R. >> > > Hint: > > f <- factor(sample(5, 10, TRUE)) > as.numeric(levels(f))[f] > > g <- factor(sample(letters[1:5], 10, TRUE)) > as.numeric(levels(g))[g] > > Peter Ehlers > > > >> [[alternative HTML version deleted]] >> >> ______________________________**________________ >> R-help@r-project.org mailing list >> https://stat.ethz.ch/mailman/**listinfo/r-help<https://stat.ethz.ch/mailman/listinfo/r-help> >> PLEASE do read the posting guide http://www.R-project.org/** >> posting-guide.html <http://www.R-project.org/posting-guide.html> >> and provide commented, minimal, self-contained, reproducible code. >> >> > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.