當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R ggplot2 ggproto 創建一個新的 ggproto 對象


使用 ggproto() 構造一個新對象,使用 is.ggproto() 進行測試,並使用 ggproto_parent() 訪問父方法/字段。

用法

ggproto(`_class` = NULL, `_inherit` = NULL, ...)

ggproto_parent(parent, self)

is.ggproto(x)

參數

_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 可以位於函數簽名中的任何位置,盡管通常它位於最前麵。

調用父級中的方法

要顯式調用父級中的方法,請使用 ggproto_parent(Parent, 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/ggproto.R

相關用法


注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Create a new ggproto object。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。