基于R语言函数中的三个点,获取可变参数的名称(解析)

4
我正在创建一个基于一些虚拟变量的自动绘图工具。我将其设置为:
plotter <- function(...) { }

它将绘制我提供的所有虚拟变量。

然而,我希望它能够在图中添加标签,即变量名称。 我知道

deparse(substitute(variablename))

将产生

"variablename"

这是一个开始,但在多个参数的情况下该怎么做呢? 这可能吗? 有没有解决方法?


我认为如果您提供一个具体的示例来说明您想要做什么,这将会更好。 - Dason
1个回答

11

names(list(...)) 将返回一个字符向量,其中包含已被 ... 吸收的提供的参数的名称:

plotter <- function(...) {names(list(...))}
plotter(x=1:4, y=11:14)
# [1] "x" "y"

另外,如果你想传递未命名的参数,请尝试以下方法(这是对 @baptiste 现已删除答案的扩展):


plotter <- function(..., pch=16, col="red") {
    nms <- setdiff(as.character(match.call(expand.dots=TRUE)), 
                   as.character(match.call(expand.dots=FALSE)))
    nms
}

x <- 1:4
y <- 1:14
plotter(x, y, col="green")
# [1] "x" "y"

然而,我确实需要为它们分配名称。如果必须调用 plotter(longvarname=longvarname),看起来会有些愚蠢,难道没有办法让它自己解释而不必显式地添加名称吗? - PascalVKooten
@Dualinity - 尝试使用 names(llist(...))(它在库 Hmisc 中) - eddi
当给定2个参数时,将"[1] "..." NA"翻译成中文。 - PascalVKooten
@Dualinity -- 基本思路是 sapply(as.list(match.call())[-1], as.character)。我会在我的答案中添加一个稍微精细一些的版本。 - Josh O'Brien
@Dualinity,是的,那很奇怪,在函数外它可以工作——可能是某种环境问题。 - eddi
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接