如果我尝试手动编写ggplot2
图的某些元素,它可以正常工作:
> p <- ggplot(aes(x = mpg, y = hp), data = mtcars)
> p + geom_vline(xintercept = 20) + geom_point(data = mtcars)
但是如果我尝试将一些组合捆绑到一个函数中,我会收到一个错误:
> myFunction <- function() {
+ return(
+ geom_vline(xintercept = 20) + geom_point(data = mtcars)
+ )
+ }
> p <- ggplot(aes(x = mpg, y = hp), data = mtcars)
> p + myFunction()
Error in geom_vline(xintercept = 20) + geom_point(data = mtcars) :
non-numeric argument to binary operator
我是否遗漏了ggplot2
符号中的某些内容,以便在函数体中正确组合ggplot2
个元素?
答案 0 :(得分:48)
ggplot2支持元素的“列表”:
myFunction <- function()
list(geom_vline(xintercept = 20),
geom_point(data = mtcars))
p <- ggplot(aes(x = mpg, y = hp), data = mtcars)
p + myFunction()
你可以在列表中保留ggplot2函数返回的任何部分,包括labs(),opts()等,然后使用“+”表示绑定ggplot2基础层和列表中的部分。
这个功能可能并不广为人知,但是当有人想要重复使用某个元素时,这个功能非常有用。