使用 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。