我正在教授一个统计课程,我试图轻轻地向学生介绍R语法(特别是ggplot)。为此,我为许多基本命令创建了包装函数。例如:
basic.plot.function = function(x,y, data=d){
p = ggplot(data, aes_string(x=x, y=y)) + geom_point() + geom_smooth()
print(p)
#dput(p) # this function isn't doing what I want it to
}
我希望函数输出图(这是print(p)的作用),但我也希望它向控制台写入用于创建它的实际代码。换句话说,如果用户键入:
mydata = data.frame(x1 = runif(100), x2 = runif(100))
basic.plot.function("x1","x2", data=mydata)
我希望它输出:
ggplot(mydata, aes_string(x="x1", y="x2")) + geom_point() + geom_smooth()
我有什么想法可以做到这一点?
答案 0 :(得分:3)
library(ggplot2)
basic.plot.function = function(x, y, data = d){
call <- paste0('ggplot(', deparse(substitute(data)), ', aes_string(x=',
deparse(substitute(x)), ', y=', deparse(substitute(y)),
')) + geom_point() + geom_smooth()')
p <- eval(parse(text = call))
print(p)
print(call)
}
data("iris")
basic.plot.function('Sepal.Length', 'Sepal.Width', iris)
> basic.plot.function('Sepal.Length', 'Sepal.Width', iris)
`geom_smooth()` using method = 'loess'
[1] "ggplot(iris, aes_string(x=\"Sepal.Length\", y=\"Sepal.Width\")) + geom_point() + geom_smooth()"
desparse(substitute(x))
将参数x
转换为字符串。您可以使用它来打印函数调用的字符串,以便在打印ggplot
对象时进行打印。您可以使用eval(parse())
评估该字符串以生成ggplot
对象。