[R] Help needed understanding eval,quote,expression
Joerg van den Hoff
j.van_den_hoff at fz-rossendorf.de
Thu Jun 29 10:48:05 CEST 2006
Prof Brian Ripley wrote:
> You are missing eval(parse(text=)). E.g.
>
>> x <- list(y=list(y1="hello",y2="world"),z=list(z1="foo",z2="bar"))
> (what do you mean by the $ at the start of these lines?)
>> eval(parse(text="x$y$y1"))
> [1] "hello"
>
> However, bear in mind
>
>> fortune("parse")
>
> If the answer is parse() you should usually rethink the question.
> -- Thomas Lumley
> R-help (February 2005)
>
> In your indicated example you could probably use substitute() as
> effectively.
>
>
> On Wed, 28 Jun 2006, toby_marks at americancentury.com wrote:
>
>> I am trying to build up a quoted or character expression representing a
>> component in a list in order to reference it indirectly.
>> For instance, I have a list that has data I want to pull, and another list
>> that has character vectors and/or lists of characters containing the names
>> of the components in the first list.
>>
>>
>> It seems that the way to do this is as evaluating expressions, but I seem
>> to be missing something. The concept should be similar to the snippet
>> below:
>>
>>
>> For instance:
>>
>> $x = list(y=list(y1="hello",y2="world"),z=list(z1="foo",z2="bar"))
>> $y = quote(x$y$y1)
>> $eval(y)
>> [1] "hello"
>>
>>
>> but, I'm trying to accomplish this by building up y as a character and
>> then evaluating it, and having no success.
>>
>> $y1=paste("x$y$","y1",sep="")
>> $y1
>> [1] "x$y$y1"
>>
>>
>> How can I evaluate y1 as I did with y previously? or can I?
>>
>>
>> Much Thanks !
>>
>>
if I understand you correctly you can achieve your goal much easier than
with eval, parse, substitute and the like:
x <- list(y=list(y1="hello",y2="world"),z=list(z1="foo",z2="bar"))
s1 <- 'y'
s2 <- 'y1'
x[[s1]][[s2]]
i.e. using `[[' instead of `$' for list component extraction allows to
use characters for indexing (in other words: x$y == x[['y']])
joerg
More information about the R-help
mailing list