On Sun, Feb 10, 2013 at 1:40 PM, Duncan Murdoch <murdoch.duncan@gmail.com>wrote:

> 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
>
>

Thanks, Duncan (and Michael, earlier); this clear everything up.  And just
so the help topic language is included in this thread:
------------
Recursive (list-like) objects

Indexing by [ is similar to atomic vectors and selects a list of the
specified element(s).

Both [[ and $ select a single element of the list. The main difference is
that $ does not allow computed indices, whereas [[ does.
-------------

which I take to mean that the argument to $ cannot require evaluation of
any kind, and so must be a string literal.

Thanks again,
David

	[[alternative HTML version deleted]]

