r - 将几何传递给函数
问题描述
我对将几何图形组合起来很感兴趣,这样我就可以重用几何图形的组合。以下面的函数为例
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))
我可以理解为什么它不起作用,因为 '+' 是一个重载运算符,显然希望左侧有一个绘图对象,右侧有一个 geom。plot+geom 的结果也是一个绘图,并且“+”是从左到右评估的,这就是为什么 ggplot 使用添加几何的语法的原因。
现在我的问题是什么是最简单的为什么要创建一个我可以轻松传递给函数的复合几何图形。
解决方案
将geoms放在一个列表中:
linepoint <- function(...) list(geom_line(size = 3, color = 'red'), geom_point(shape=21))
draw_curve(plotfun = linepoint)
推荐阅读
- google-apps-script - 如何在 Google 工作表中自动运行脚本
- python - 如何让布局显示在底部
- python - 解析 XML 后,即使在注册命名空间后也缺少两个命名空间
- python - __init__ 中的链接函数
- c# - 如何从 asp.net core 中的外部 Json 文件访问数据?
- sql - 基于先进后出生成查询的 Oracle 查询获取员工进出时间
- url - 如何过滤多级扩展的Odata Query?
- reactjs - 如何将我的自定义主题从带有 material-ui 的反应项目传递给一个相同的主题,但只有可重用的组件通过汇总转译?
- c++ - GetKeyboardLayout() 在 ENG US 和 ENG INT 之间切换时不会改变
- android - 如何使用 Picasso 和 Android Studio 将图像加载到 Android 应用程序中