Re: [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, [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 ! CONFIDENTIALITY NOTICE: This electronic mail transmission (i...{{dropped}} __ 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 -- 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, UKFax: +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
Re: [R] Help needed understanding eval,quote,expression
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
Re: [R] Help needed understanding eval,quote,expression
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, UKFax: +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
Re: [R] Help needed understanding eval,quote,expression
Great help, thanks to both of you. I actually think I get it. I think I was locked into eval(expression ... ) as the solution. I did search the archives for this question, but it must not have clicked with me.The Thomas Lumley R-help (February 2005) was on the money. I was missing the power flexibility of the [[ operation. It is certainly more direct. I do believe this pattern will satisfy my original problem. x = list(y=list(y1=hello,y2=world),z=list(z1=foo,z2=bar)) ids = list( zIds=c(z1,z2),yIds=c(y1,y2)) str=y1 x$y[[str]] [1] hello btw: I set my prompt to $, so the first post, the $ at the beginning of the line was the prompt. apologies for the confusion. cheers. Prof Brian Ripley [EMAIL PROTECTED] 06/29/2006 04:06 AM To Joerg van den Hoff [EMAIL PROTECTED] cc [EMAIL PROTECTED], r-help@stat.math.ethz.ch Subject Re: [R] Help needed understanding eval,quote,expression 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, UKFax: +44 1865 272595 CONFIDENTIALITY NOTICE: This electronic mail transmission (i...{{dropped}} __ 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