从......获取名字(点)

时间:2012-09-14 01:08:54

标签: r

在改进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

2 个答案:

答案 0 :(得分:13)

我从Bill Dunlap on the R Help List Serve选择了这个:

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

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

答案 1 :(得分:8)

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

例如substitute(list(...))

并与as.character

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

您也可以使用

rbind.test <- function(...){as.character(match.call(expand.dots = F)$...)}