如果我尝试手动编写ggplot2绘图的某些元素,它可以正常工作:
> p <- ggplot(aes(x = mpg, y = hp), data = mtcars)
> p + geom_vline(xintercept = 20) + geom_point(data = mtcars)
Run Code Online (Sandbox Code Playgroud)
但是如果我尝试将一些组合捆绑到一个函数中,我会收到一个错误:
> 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
Run Code Online (Sandbox Code Playgroud)
我ggplot2是否因为ggplot2在函数体中正确组合元素而在符号中遗漏了一些东西?
koh*_*ske 48
ggplot2支持元素的"列表":
myFunction <- function()
list(geom_vline(xintercept = 20),
geom_point(data = mtcars))
p <- ggplot(aes(x = mpg, y = hp), data = mtcars)
p + myFunction()
Run Code Online (Sandbox Code Playgroud)
您可以在列表中保留ggplot2函数返回的任何部分,包括labs(),opts()等,然后使用"+"表示绑定ggplot2基础层和列表中的部分.
可能这个功能并不广为人知,但是当有人想重新使用一个元素时,这个功能非常有用.