在改进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
答案 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)$...)}