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 <ehlers@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]]

