この文書は,Winston Chang によるRパッケージ R6
(version 2.2.0) のビネット "Debugging methods in R6 objects" の日本語訳です.
License: MIT
関連文書
R6クラスのメソッドをデバッグするのは,通常のR関数をデバッグするのとは少々異なります.
R6クラスのメソッドに対してはRStudioのブレークポイントが動作しません.コードをデバッグする最も単純な方法は,デバッグコンソールを開きたい箇所にbrowser()
という行を挿入し,クラスをリロードしてからコードを実行することです.しかしこの方法では,コードを修正してリロードし,テストしたいオブジェクトを再度インスタンス化する必要があります.
クラスの今後作成するすべてのインスタンスをデバッグ可能にする
R6のジェネレータオブジェクトには,メソッドのデバッグを可能にするdebug()
というメソッドがあります.これはdebug()
が呼び出された後に作成される,そのクラスのすべてのインスタンスに対して作用します.
# 例示用のクラス
Simple <- R6Class("Simple",
public = list(
x = 10,
getx = function() self$x
)
)
# Simpleクラスの,今後インスタンス化されるオブジェクトの
# getx()メソッドをデバッグ可能にする
Simple$debug("getx")
s <- Simple$new()
s$getx()
# [デバッグプロンプト]
今後作成するインスタンスに対するデバッグを無効にするには,ジェネレータオブジェクトのundebug()
メソッドを使います.
# 以後作成するインスタンスに対してデバッグを無効にする
Simple$undebug("getx")
s <- Simple$new()
s$getx()
#> [1] 10
個別のオブジェクトのメソッドをデバッグする
あるオブジェクトの単一のインスタンスに対してデバッグを可能にするには,(ジェネレータオブジェクトのdebug()
メソッドではなくて)debug()
関数を使います.
s <- Simple$new()
debug(s$getx)
s$getx()
# [デバッグプロンプト]
オブジェクトのメソッドに対するデバッグを無効にするには,undebug()
を使います.
undebug(s$getx)
s$getx()
#> [1] 10
メソッドのどこでデバッグコンソールに入りたいかを指定するのにtrace()
関数を使うこともできます.
訳注:翻訳の際,コードは以下の環境で実行した.
devtools::session_info()
#> Session info --------------------------------------------------------------
#> setting value
#> version R version 3.3.2 (2016-10-31)
#> system x86_64, mingw32
#> ui RTerm
#> language (EN)
#> collate Japanese_Japan.932
#> tz Asia/Tokyo
#> date 2017-01-15
#> Packages ------------------------------------------------------------------
#> package * version date source
#> backports 1.0.4 2016-10-24 CRAN (R 3.3.2)
#> devtools 1.12.0 2016-06-24 CRAN (R 3.3.2)
#> digest 0.6.10 2016-08-02 CRAN (R 3.3.2)
#> evaluate 0.10 2016-10-11 CRAN (R 3.3.2)
#> htmltools 0.3.5 2016-03-21 CRAN (R 3.3.1)
#> knitr 1.15.1 2016-11-22 CRAN (R 3.3.2)
#> magrittr 1.5 2014-11-22 CRAN (R 3.3.1)
#> memoise 1.0.0 2016-01-29 CRAN (R 3.3.1)
#> Rcpp 0.12.8 2016-11-17 CRAN (R 3.3.2)
#> rmarkdown 1.2 2016-11-21 CRAN (R 3.3.2)
#> rprojroot 1.1 2016-10-29 CRAN (R 3.3.2)
#> stringi 1.1.2 2016-10-01 CRAN (R 3.3.2)
#> stringr 1.1.0 2016-08-19 CRAN (R 3.3.2)
#> withr 1.0.2 2016-06-20 CRAN (R 3.3.1)
#> yaml 2.1.14 2016-11-12 CRAN (R 3.3.2)