機略戦記

Maneuver warfare

RのR6パッケージを使ってクラスを作るとき、クラスメソッドとかスタティックメソッドみたいな物を定義したい。

背景

R6パッケージで作ったこんなクラスに対して、クラスメソッドとかスタティックメソッドみたいな物を付けたい。 クラスメソッドとスタティックメソッドは違うものだけど、とにかくクラスをインスタンス化しなくても使えるメソッドを付けたい。

# ある証券の値動き。日足。
Stock <- R6::R6Class('Stock',
  public = list(
    initialize = function(price_moves) {
      private$price_moves <- price_moves

      private$convert_value_type()
    },
    # ... public method達
  ),
  private = list(
    # ... private method達
  )
)

用途としては、このStockクラスのinstanceを生成するメソッドをクラスメソッドとして付けたい。

結論

Stock <- R6::R6Class('Stock',
  public = list(
    initialize = function(price_moves) {
      private$price_moves <- price_moves

      private$convert_value_type()
    },
    # ... public method達
  ),
  private = list(
    # ... private method達
  )
)

# オラァ
Stock$create <- function(filepath) {
  Stock$new(fread(paste(work_dir, filepath, sep='')))
}