6

在改进rbind方法时,我想提取传递给它的对象的名称,以便我可以从中生成唯一的 ID。

我试过all.names(match.call())了,但这只是给了我:

[1] "rbind"         "deparse.level" "..1"           "..2" 

通用示例:

rbind.test <- function(...) {
  dots <- list(...)
  all.names(match.call())
}

t1 <- t2 <- ""
class(t1) <- class(t2) <- "test"
> rbind(t1,t2)
[1] "rbind"         "deparse.level" "..1"           "..2" 

而我希望能够检索c("t1","t2").

我知道通常无法检索传递给函数的对象的名称,但似乎 ... 可能是可能的,如上面示例中的substitute(...)返回t1

4

2 回答 2

13

我从R Help List Serve 上的 Bill Dunlap那里挑选了这个:

rbind.test <- function(...) {
    sapply(substitute(...()), as.character)
}

我认为这会给你你想要的。

于 2012-09-14T02:20:37.887 回答
8

使用此处的指导How to use R's ellipsis feature when writing your own function?

例如substitute(list(...))

并结合 withas.character

rbind.test <- function(...) {
  .x <-  as.list(substitute(list(...)))[-1]
  as.character(.x)
 }

你也可以使用

rbind.test <- function(...){as.character(match.call(expand.dots = F)$...)}
于 2012-09-14T01:16:35.697 回答