Is there a tidy way to get the names of objects passed to a function via the "..." argument? rbind/cbind does what I want: test.func1 <- function(...) { nms <- rownames(rbind(..., deparse.level=1)) print(nms) } x <- "some stuff" second <- "more stuff" test.func1(first=x, second) [1] "first" "second" The usual 'deparse(substitute())' doesn't do it: test.func2 <- function(...) { nms <- deparse(substitute(...)) print(nms) } test.func2(first=x, second) [1] "x" I'm using "nms <- rownames(rbind(...))" as a workaround, which works, but there must be a neater way! rbind/cbind are .Internal, so I can't pinch code from there. Thanks, Mike. -- View this message in context: http://www.nabble.com/Getting-names-of-objects-passed-with-%22...%22-tf3850318.html#a10906614 Sent from the R help mailing list archive at Nabble.com.
I use: foo <- function(...) { args <- list(...); names(args); } /Henrik On 6/1/07, Mike Meredith <mmeredith at wcs.org> wrote:> > Is there a tidy way to get the names of objects passed to a function via the > "..." argument? > > rbind/cbind does what I want: > > test.func1 <- function(...) { > nms <- rownames(rbind(..., deparse.level=1)) > print(nms) > } > > x <- "some stuff" > second <- "more stuff" > test.func1(first=x, second) > [1] "first" "second" > > The usual 'deparse(substitute())' doesn't do it: > > test.func2 <- function(...) { > nms <- deparse(substitute(...)) > print(nms) > } > test.func2(first=x, second) > [1] "x" > > I'm using "nms <- rownames(rbind(...))" as a workaround, which works, but > there must be a neater way! > > rbind/cbind are .Internal, so I can't pinch code from there. > > Thanks, Mike. > > -- > View this message in context: http://www.nabble.com/Getting-names-of-objects-passed-with-%22...%22-tf3850318.html#a10906614 > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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 > and provide commented, minimal, self-contained, reproducible code. >
See: http://tolstoy.newcastle.edu.au/R/e2/help/06/10/2242.html which we can modify slightly for the case in question like this: f <- function(...) { x <- list(...) if (is.null(names(x))) names(x) <- "" names(x)[names(x) == ""] <- NA mc <- match.call()[-1] ifelse(is.na(names(x)), as.character(mc), names(x)) } f(a = mean) # a f(F = function(x)x) # F f(a = mean, b = sd) # c("a", "b") f(cos, sin) # c("cos", "sin") f(a = cos, sin) # c("a", "sin") On 6/1/07, Mike Meredith <mmeredith at wcs.org> wrote:> > Is there a tidy way to get the names of objects passed to a function via the > "..." argument? > > rbind/cbind does what I want: > > test.func1 <- function(...) { > nms <- rownames(rbind(..., deparse.level=1)) > print(nms) > } > > x <- "some stuff" > second <- "more stuff" > test.func1(first=x, second) > [1] "first" "second" > > The usual 'deparse(substitute())' doesn't do it: > > test.func2 <- function(...) { > nms <- deparse(substitute(...)) > print(nms) > } > test.func2(first=x, second) > [1] "x" > > I'm using "nms <- rownames(rbind(...))" as a workaround, which works, but > there must be a neater way! > > rbind/cbind are .Internal, so I can't pinch code from there. > > Thanks, Mike. > > -- > View this message in context: http://www.nabble.com/Getting-names-of-objects-passed-with-%22...%22-tf3850318.html#a10906614 > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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 > and provide commented, minimal, self-contained, reproducible code. >