R 将几何图形传递给函数

R 将几何图形传递给函数,r,ggplot2,R,Ggplot2,我感兴趣的是将几何图形组合成绘图,这样我就可以重用几何图形的组合。以下面的函数为例 draw_curve = function(from = -pi, to = pi, fun = sin, plotfun = geom_line, length.out = 100, ...) { x = seq(from, to, (to-from)/length.out) y = fun(x) sindf = data.frame(x = x, y = y) ggplot(sindf, a

我感兴趣的是将几何图形组合成绘图,这样我就可以重用几何图形的组合。以下面的函数为例

draw_curve = function(from = -pi, to = pi, fun = sin, plotfun = geom_line, length.out = 100, ...) { 
  x = seq(from, to, (to-from)/length.out)
  y = fun(x)
  sindf = data.frame(x = x, y = y)
  ggplot(sindf, aes(x = x, y = y)) + 
    plotfun(...)
}
现在进行以下工作:

draw_curve(plotfun = geom_point)
甚至还有以下几点:

draw_curve(plotfun = function(...) geom_line(size = 3, color = 'red', ...))
但是,以下情况并非如此:

draw_curve(plotfun = function(...) geom_line(size = 3, color = 'red') + geom_point(shape=21))
我能理解为什么它不起作用,因为“+”是一个重载操作符,显然它需要在左侧有一个plot对象,在右侧有一个geom。plot+geom的结果也是一个plot,“+”从左到右求值,这就是为什么ggplot使用添加geom的语法


现在我的问题是,为什么要创建一个可以轻松传递到函数中的复合几何体,最简单的方法是什么

将几何图形放入列表中:

linepoint <- function(...) list(geom_line(size = 3, color = 'red'), geom_point(shape=21))
draw_curve(plotfun = linepoint)

linepoint将几何图形放入列表中:

linepoint <- function(...) list(geom_line(size = 3, color = 'red'), geom_point(shape=21))
draw_curve(plotfun = linepoint)

linepoint您只是把括号放在了错误的位置
draw_curve(plotfun=function(…)geom_line(size=3,color='red'))+geom_point(shape=21)
应该很好,这当然是另一种解决方案。只需让函数返回一个ggplot对象,然后将geom添加到结果中即可。这就是删除plotfun参数来绘制曲线。你只是把括号放在了错误的位置
绘制曲线(plotfun=function(…)geom\u line(size=3,color=red'))+geom\u point(shape=21)
应该很好,这当然是另一种解决方案。只需让函数返回一个ggplot对象,然后将geom添加到结果中即可。这就是删除plotfun参数以绘制_曲线。