On Jan 30, 2011, at 10:38 AM, Tal Galili wrote: > Hello all, > > I would like to extract the variable name passed into a specific argument of > a function. > Using match.call() will give me a list of arguments and what was passed into > them, but I couldn't find how to get a particular argument out of it (at > least without using some string manipulation). > > Here is an example (in it, my objective is to know what is the variable name > assigned to the argument "b"): > > foo <- function(a, b, c) > { > print(match.call()) > } > x = 1 ; y = 1 > foo(x, y) # here the answer should be "y" > foo(c= x, y) # here the answer should be "" (or NULL/NA) > > > Any suggestion on how to do this? > > > BTW, the purpose of this is to be able to avoid the error produced by, for > example, this: > > yy <- data.frame(y = 1:10, x = 1:10) > plot(y, data = yy) # error > plot(y~x, data = yy) # no error...
Tal, Try this: x <- 1 y <- 1 foo <- function(a, b, c) {as.list(match.call())} > foo(x, y) [[1]] foo $a x $b y > foo(x, y)$b y > foo(c = x, y)$b NULL If you really only want 'b' and not be able to get the other arguments, you can use: foo2 <- function(a, b, c) {as.list(match.call())$b} > foo2(x, y) y > foo2(c = x, y) NULL In your plot example above, you are first dispatching plot.default(), which of course has no 'data' argument. In the second case, you are dispatching plot.formula() which does have a 'data' argument, as do most, if not all, R functions that take a formula as an argument. HTH, Marc Schwartz ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.