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, [EMAIL PROTECTED] 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 ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html