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

この文書は，Winston Chang によるRパッケージ [`R6`](https://cran.r-project.org/package=R6) (version 2.2.0) のビネット ["Debugging methods in R6 objects"](https://cran.r-project.org/package=R6/vignettes/Debugging.html) の日本語訳です．

License: [MIT](https://opensource.org/licenses/MIT)

**関連文書**

- [R6クラス入門](http://qiita.com/nakamichi/items/d724468e0f716d7a174c)
- [移植可能R6クラスと移植不可R6クラス](http://qiita.com/nakamichi/items/b1240935894c2ca72c98)
- [R6オブジェクトのメソッドのデバッグ](http://qiita.com/nakamichi/items/97551ebc6bdfe1119cba)
- [R6と参照クラスの性能テスト](http://qiita.com/nakamichi/items/1841e7450a5621fa7142)

----



<!-- Debugging methods in R6 classes is somewhat different from debugging normal R functions. -->

R6クラスのメソッドをデバッグするのは，通常のR関数をデバッグするのとは少々異なります．

<!-- RStudio breakpoints don't work in R6 class methods. The simplest way to debug code is to insert a `browser()` line where you want to open a debugging console, reload the classes, and then step through your code. But this involves modifying your code, reloading it, and re-instantiating any objects you want to test. -->

R6クラスのメソッドに対してはRStudioのブレークポイントが動作しません．コードをデバッグする最も単純な方法は，デバッグコンソールを開きたい箇所に`browser()`という行を挿入し，クラスをリロードしてからコードを実行することです．しかしこの方法では，コードを修正してリロードし，テストしたいオブジェクトを再度インスタンス化する必要があります．

<!-- ## Enabling debugging for all future instances of a class -->

## クラスの今後作成するすべてのインスタンスをデバッグ可能にする

<!-- R6 generator objects have a method called `debug()` which will enable debugging for a method. This will affect all instances of the class that are created after the `debug()` is called. -->

R6のジェネレータオブジェクトには，メソッドのデバッグを可能にする`debug()`というメソッドがあります．これは`debug()`が呼び出された後に作成される，そのクラスのすべてのインスタンスに対して作用します．


```r
# 例示用のクラス
Simple <- R6Class("Simple",
  public = list(
    x = 10,
    getx = function() self$x
  )
)

# Simpleクラスの，今後インスタンス化されるオブジェクトの
# getx()メソッドをデバッグ可能にする
Simple$debug("getx")

s <- Simple$new()
s$getx()
# [デバッグプロンプト]
```
<!-- # An example class -->
<!-- # This will enable debugging the getx() method for objects of the 'Simple' -->
<!-- # class that are instantiated in the future. -->
<!-- # [Debugging prompt] -->

<!-- To disable debugging for future instances, use the generator's `undebug()` method: -->
今後作成するインスタンスに対するデバッグを無効にするには，ジェネレータオブジェクトの`undebug()`メソッドを使います．


```r
# 以後作成するインスタンスに対してデバッグを無効にする
Simple$undebug("getx")

s <- Simple$new()
s$getx()
#> [1] 10
```
<!-- # Disable debugging for future instances: -->

<!-- ## Debugging methods in individual objects -->

## 個別のオブジェクトのメソッドをデバッグする

<!-- To enable debugging for a method in a single instance of an object, use the `debug()` function (not the `debug()` method in the generator object). -->

あるオブジェクトの単一のインスタンスに対してデバッグを可能にするには，（ジェネレータオブジェクトの`debug()`メソッドではなくて）`debug()`関数を使います．


```r
s <- Simple$new()
debug(s$getx)
s$getx()
# [デバッグプロンプト]
```
<!-- # [Debugging prompt] -->

<!-- Use `undebug()` to disable debugging on an object's method. -->

オブジェクトのメソッドに対するデバッグを無効にするには，`undebug()`を使います．


```r
undebug(s$getx)
s$getx()
#> [1] 10
```

<!-- You can also use the `trace()` function to specify where in a method you want to drop into the debugging console. -->

メソッドのどこでデバッグコンソールに入りたいかを指定するのに`trace()`関数を使うこともできます．

----

訳注：翻訳の際，コードは以下の環境で実行した．


```r
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)
```