使用 ggproto()
构造一个新对象,使用 is.ggproto()
进行测试,并使用 ggproto_parent()
访问父方法/字段。
参数
- _class
-
分配给对象的类名。这被存储为对象的类属性。这是可选的:如果
NULL
(默认值),则不会将类名添加到对象中。 - _inherit
-
要继承的 ggproto 对象。如果是
NULL
,则不要从任何对象继承。 - ...
-
ggproto 对象中的成员列表。
- parent, self
-
访问对象
self
的父类parent
。 - x
-
要测试的对象。
细节
ggproto 实现了一个基于原型的 OO 系统,它模糊了类和实例之间的界限。它的灵感来自于原型包,但它有一些重要的区别。值得注意的是,它完全支持跨包继承,并且具有更快的性能。
在大多数情况下,创建一个供单个包使用的新的面向对象系统并不是一个好主意。然而,它是 ggplot2 中最不糟糕的解决方案,因为它需要对已经很复杂的代码库进行最少的更改。
调用方法
ggproto 方法可以采用可选的 self
参数:如果存在,则它是常规方法;如果不存在,则它是 "static" 方法(即它不使用任何字段)。
假设您有一个 ggproto 对象 Adder
,它有一个方法 addx = function(self, n) n + self$x
。然后,要调用此函数,您将使用Adder$addx(10)
——self
由包装函数自动传入。 self
可以位于函数签名中的任何位置,尽管通常它位于最前面。
例子
Adder <- ggproto("Adder",
x = 0,
add = function(self, n) {
self$x <- self$x + n
self$x
}
)
is.ggproto(Adder)
#> [1] TRUE
Adder$add(10)
#> [1] 10
Adder$add(10)
#> [1] 20
Doubler <- ggproto("Doubler", Adder,
add = function(self, n) {
ggproto_parent(Adder, self)$add(n * 2)
}
)
Doubler$x
#> [1] 20
Doubler$add(10)
#> [1] 40
相关用法
- R ggplot2 ggplot 创建一个新的ggplot
- R ggplot2 ggsf 可视化 sf 对象
- R ggplot2 ggsave 使用合理的默认值保存 ggplot (或其他网格对象)
- R ggplot2 ggtheme 完整的主题
- R ggplot2 gg-add 将组件添加到图中
- R ggplot2 geom_qq 分位数-分位数图
- R ggplot2 geom_spoke 由位置、方向和距离参数化的线段
- R ggplot2 geom_quantile 分位数回归
- R ggplot2 geom_text 文本
- R ggplot2 get_alt_text 从绘图中提取替代文本
- R ggplot2 geom_ribbon 函数区和面积图
- R ggplot2 geom_boxplot 盒须图(Tukey 风格)
- R ggplot2 geom_hex 二维箱计数的六边形热图
- R ggplot2 geom_bar 条形图
- R ggplot2 guide_legend 图例指南
- R ggplot2 geom_bin_2d 二维 bin 计数热图
- R ggplot2 geom_jitter 抖动点
- R ggplot2 geom_point 积分
- R ggplot2 geom_linerange 垂直间隔:线、横线和误差线
- R ggplot2 geom_blank 什么也不画
- R ggplot2 guides 为每个尺度设置指南
- R ggplot2 geom_path 连接观察结果
- R ggplot2 geom_violin 小提琴情节
- R ggplot2 guide_bins Guide_legend 的分箱版本
- R ggplot2 geom_dotplot 点图
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Create a new ggproto object。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。