[R] access elements of a named list using a factor
Uwe Ligges
ligges at statistik.tu-dortmund.de
Sat Oct 24 18:45:16 CEST 2009
Robin, see below my inserted comments.
Robin Hankin wrote:
> Hello Dimitris
>
> thanks for this. It works! I guess I was fixated on the dollar sign.
>
> I must confess that I don't really understand any of the error
> messages below. Can anyone help me interpret them?
>
> rksh
>
>
>
> Dimitris Rizopoulos wrote:
>> do you mean:
>>
>> f <- factor(c("pigs", "pigs", "slugs"))
>> jj <- list(pigs = 1:10, slugs = 1:3)
>>
>> jj[levels(f)[1]]
>> jj[[levels(f)[1]]]
>>
>>
>> Best,
>> Dimitris
>>
>>
>> Robin Hankin wrote:
>>> Hi
>>>
>>> I have a factor 'f' and a named list 'jj'.
>>>
>>> I want names(jj) to match up with levels(f).
>>>
>>> How do I use levels(f) to access elements of jj?
>>>
>>>
>>> > f <- factor(c("pigs","pigs","slugs"))
>>> > f
>>> [1] pigs pigs slugs
>>> Levels: pigs slugs
>>> >
>>> > jj <- list(pigs=1:10,slugs=1:3)
>>>
>>>
>>>
>>> My attempts to produce jj$pigs all give errors:
>>>
>>> > jj$levels(f)[1]
>>> Error: attempt to apply non-function
jj$levels(f): R's guess is that you want to apply some function
jj$levels to f. Since jj$levels is NULL, it is not a function and R
responds with the messages of the "attempt to apply a non-function".
>>> > do.call("$",jj,levels(f)[1])
>>> Error in if (quote) { : argument is not interpretable as logical
That's right: ?do.call tells us about the usage:
do.call(what, args, quote = FALSE, envir = parent.frame())
hence you asked to apply the function what = "$" on the arguments given
in list args = jj (i.e. first arg is first element of jj and second
arg is second element of jj) and you wanted to use quote = levels(f)[1].
If you had rather used teh ugly
do.call("$", list(jj,levels(f)[1]))
it should have work (all argumentes in a list). Dimitris already gave
the answer how to do it much better.
>>> > "$"(jj,levels(f)[1])
>>> Error in jj$levels(f)[1] : invalid subscript type 'language'
Here the call is constructed using levels(f)[1] rather than its value again.
Best wishes,
Uwe
>>>
>>>
>>>
>>>
>>>
>>
>
>
More information about the R-help
mailing list