toby_marks at americancentury.com
2006-Jun-29 02:18 UTC
[R] Help needed understanding eval,quote,expression
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 ! ------------------------------------------------------------ CONFIDENTIALITY NOTICE: This electronic mail transmission (i...{{dropped}}
Prof Brian Ripley
2006-Jun-29 08:14 UTC
[R] Help needed understanding eval,quote,expression
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 ! > > > > > > > > > ------------------------------------------------------------ > CONFIDENTIALITY NOTICE: This electronic mail transmission (i...{{dropped}} > > ______________________________________________ > R-help at 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 >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595