On Thu, 29 Jun 2006, Joerg van den Hoff wrote: > 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']])
But what he actually asked for was >>> I am trying to build up a quoted or character expression representing a >>> component in a list in order to reference it indirectly. You just typed in x[[s1]][[s2]], not 'built [it] up'. Suppose the specification had been r <- "x" s <- c("y", "y1") and s was of variable length? Then you need to construct a call similar to x[["y"]][["y1"]] from r and s. [There was another reason for sticking with $ rather than using [[: the latter makes unnecessary copies in released versions of R.] -- Brian D. Ripley, [EMAIL PROTECTED] 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 ______________________________________________ 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