[R] Substituted arguments surviving multiple function calls

Prof Brian Ripley ripley at stats.ox.ac.uk
Tue Aug 23 17:10:46 CEST 2005


I think you would do better to use [[]], which allows this sort of thing 
as character strings.

f1 <- function(x) d[[deparse(substitute(x))]]

Now f1 is looking for the *name* it is called with, so you need

f2 <- function(x) eval(substitute(f1(x), list(x=substitute(x))))

Leaving the eval off

f2n <- function(x) substitute(f1(x), list(x=substitute(x)))

> f2n(a1)
f1(a1)

shows you how it works.

This really isn't a good idea, though, just to avoid a couple of quotes.

On Tue, 23 Aug 2005, Michael Hoffman wrote:

> I am using R 2.1.1 and have written a function that will retrieve a
> named column from a data frame:
>
> d = data.frame(a1=c(4, 2), a2=c(6, 7))
> f1 = function(x)
> {
>   do.call("$", list(d, substitute(x)))
> }
>
> So this works:
>
> > f1(a1)
> [1] 4 2
>
> However, I want to make another function, f2, which also accepts a
> column name as an argument and then calls the first function with it:
>
> f2 = function(x)
> {
>   f1(substitute(x))
> }
>
> However, this does not work:
>
> > f2(a1)
> Error in list(a1 = c(4, 2), a2 = c(6, 7))$substitute(x) :
>         invalid subscript type
>
> It works if I take the substitute() out of f1(), but then I can only
> call f1() through f2() or something that does the substitution for it.
> Is there a better way to do this?
>
> Thanks for any help you can offer.
> -- 
> Michael Hoffman
>
> ______________________________________________
> 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




More information about the R-help mailing list