LoginSignup
0
0

More than 5 years have passed since last update.

[翻訳]R6 vignette: R6オブジェクトのメソッドのデバッグ

Last updated at Posted at 2017-01-15

この文書は,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)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0