例如,在包ggplot2中,您可以指定:ggplot2(data = mydataframe, aes(x=mycolumnname))
。我正在寻找类似的东西,但我找到的唯一解决方案是使用带有引号名称的双括号运算符。例如传递:
a = myfunction(data = mydataframe, name = "mycolumnname") {
...
col = mydataframe[[name]]
...
}
我知道这很挑剔,但有没有办法让用户不必在引号中输入参数名称?我在R函数中一直看到它。
答案 0 :(得分:6)
这样的东西?
myfunction <- function(DF,col) {
DF[,as.character(substitute(col))]
}
dat <- data.frame(a=1:5,b=6:10)
myfunction(dat,b)
#[1] 6 7 8 9 10
见@Justin关于危险的评论。
答案 1 :(得分:6)
另一种选择是使用match.call
:
myfunction <- function(DF,col) {
pars <- as.list(match.call()[-1])
DF[,as.character(pars$col)]
}
然后所有这些陈述都是等价的:
myfunction(dat,b)
myfunction(dat,col=b)
myfunction(dat,col="b")
当然,您可以对所有函数参数进行概括:
myfunction <- function(DF,col) {
pars <- as.list(match.call()[-1])
get(as.character(pars$DF))[,as.character(pars$col)]
}