始める無料で始める

これは終わり(R6オブジェクトの)

R6クラスは、オブジェクト作成時にカスタムコードを実行するための公開メソッド initialize() を定義できるのと同様に、オブジェクト破棄時にカスタムコードを実行する公開メソッド finalize() も定義できます。finalize() は引数を取りません。一般的には、データベースファイル への接続を閉じたり、グローバルな options()docs)やグラフィックスの par()docs)パラメータの変更といった副作用を元に戻すために使います。

コードのテンプレートは次のとおりです。

thing_factory <- R6Class(
  "Thing",
  public = list(
    initialize = function(x, y, z) {
      # do something
    },
    finalize = function() {
      # undo something
    }
  )
)

finalize() メソッドは、R の自動ガベージコレクタによってオブジェクトがメモリから削除されるときに呼び出されます。gc()docs)を入力すると、ガベージコレクションを強制的に実行できます。

この演習はコースの一部です

R における S3 と R6 を使ったオブジェクト指向プログラミング

コースを見る

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Microwave_factory is predefined
microwave_oven_factory

# Complete the class definition
smart_microwave_oven_factory <- R6Class(
  "SmartMicrowaveOven",
  inherit = ___, # Specify inheritance
  private = list(
    # Add a field to store connection
    ___ = ___
  ),
  public = list(
    initialize = function() {
      # Connect to the database
      ___$___ = ___(___(), "___")
    },
    get_cooking_time = function(food) {
      dbGetQuery(
        private$conn,
        sprintf("SELECT time_seconds FROM cooking_times WHERE food = '%s'", food)
      )
    },
    finalize = function() {
      # Print a message
      ___("___")
      # Disconnect from the database
      ___(___$___)
    }
  )
)

# Create a smart microwave object
a_smart_microwave <- ___
  
# Call the get_cooking_time() method
___
コードを編集して実行