R
中的某些功能可以将data.frame
作为参数,同时具有可以接受names
的{{1}}的单独参数(无需引用)他们作为字符串)。
这方面的一个具体示例是data.frame
包中的函数qplot
:
ggplot2
myDF <- data.frame(values=rnorm(5*2), group=c(rep("A", 5), rep("B", 5)))
qplot(values, data=myDF, colour=group, geom="density")
可以qplot
和values
知道它们是group
的列。
现在,如果我想编写一个在绘图之前进行一些预处理的包装函数,我将失去该功能:
myDF
现在,如果我尝试调用# A silly example. But lets assume our dataframe has more than 1 group column
silly.wrapper <- function(dataframe, colour) {
dataframe$values <- dataframe$values*2
qplot(values*2, data=dataframe, geom="density", colour=colour)
}
并给它silly.wrapper
,则会抛出一个错误,表明对象组尚未声明(正如您所期望的那样):
colour=group
我也尝试过使用# We have to call print because its a lattice plot so returned qplot won't render
# otherwise. Removing call to print still results in the same error.
print(silly.wrapper(myDF, colour=group))
Error in eval(expr, envir, enclos) : object 'group' not found
In addition: Warning message:
In eval(expr, envir, enclos) : restarting interrupted promise evaluation
:
...
但是得到相同的错误信息。
这引出了一个更普遍的问题:如何编写一个函数,如silly.wrapper <- function(dataframe, ...) {
dataframe$values <- dataframe$values*2
qplot(values*2, data=dataframe, geom="density", ...)
}
,它不会在以后检查对象的存在,即将其作为数据帧的列访问?