[R] different behavior of $ with string literal vs string variable as argument

Duncan Murdoch murdoch.duncan at gmail.com
Sun Feb 10 22:40:13 CET 2013


On 13-02-10 4:06 PM, David Romano wrote:
> Hi everyone,
>
> I ran into the issue below while trying to execute a command of the form
>
> apply(list.names,1, function(x)  F(favorite.list$x) )
>
> where list.names is a character vector containing the names of the elements
> of favorite.list and F is some function defined on a list element.
>
> Namely,  the $ operator doesn't treat the string variable 'x' as the string
> it represents, so that, e.g.
>
>> ll <- list(ss="abc")
>> ll$ss
> [1] "abc"
>> ll$"ss"
> [1] "abc"
>
> but
>
>> name <- "ss"
>> ll$name
> NULL
>
> I can get around this by using integers and the [[ and [ operators, but I'd
> like to be able to use names directly, too -- how would I go about doing
> this?
>
> Thanks for your help in clarifying what might be going on here.

You can use names with [[, e.g.

ll[[name]]

will work in your example.  You can see more details in the help topic 
help("$"), in the section "Recursive (list-like) objects".

Duncan Murdoch



More information about the R-help mailing list