[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