R6 - 使用打印功能时,为什么活动装订打印内容的两倍?

时间:2018-05-24 08:27:18

标签: r r6

我在R6类中创建一个活动绑定来打印一个私有元素。

当我调用print(private$privMail)时,结果会打印两次,但仅限于私有元素,而不是公开。

如果我没有使用print,没问题。

这是一个代表:

team <- R6::R6Class("Team",
                public = list( mail = "colin@thinkr.fr"),
                private = list(privMail = "colin@thinkr.fr"), 
                active = list(
                  MailPriv = function(){ print(private$privMail) },
                  Mail = function(){ print(self$mail) }
                )
)
a <- team$new()
a$MailPriv
#> [1] "colin@thinkr.fr"
#> [1] "colin@thinkr.fr"
a$Mail
#> [1] "colin@thinkr.fr"
#> [1] "colin@thinkr.fr"
#Without using print 
team2 <- R6::R6Class("Team",
                    public = list( mail = "colin@thinkr.fr"),
                    private = list(privMail = "colin@thinkr.fr"), 
                    active = list(
                      MailPriv = function(){ private$privMail },
                      Mail = function(){self$mail }
                    )
)
abis <- team2$new()
abis$MailPriv
#> [1] "colin@thinkr.fr"
abis$Mail
#> [1] "colin@thinkr.fr"


devtools::session_info()
#> Session info -------------------------------------------------------------
#>  setting  value                       
#>  version  R version 3.4.4 (2018-03-15)
#>  system   x86_64, darwin15.6.0        
#>  ui       X11                         
#>  language (EN)                        
#>  collate  fr_FR.UTF-8                 
#>  tz       Europe/Paris                
#>  date     2018-05-24
#> Packages -----------------------------------------------------------------
#>  package   * version date       source                          
#>  backports   1.1.2   2017-12-13 CRAN (R 3.4.3)                  
#>  base      * 3.4.4   2018-03-15 local                           
#>  compiler    3.4.4   2018-03-15 local                           
#>  datasets  * 3.4.4   2018-03-15 local                           
#>  devtools    1.13.5  2018-02-18 CRAN (R 3.4.3)                  
#>  digest      0.6.15  2018-01-28 CRAN (R 3.4.3)                  
#>  evaluate    0.10.1  2017-06-24 CRAN (R 3.4.1)                  
#>  graphics  * 3.4.4   2018-03-15 local                           
#>  grDevices * 3.4.4   2018-03-15 local                           
#>  htmltools   0.3.6   2017-04-28 CRAN (R 3.4.0)                  
#>  knitr       1.20    2018-02-20 CRAN (R 3.4.3)                  
#>  magrittr    1.5     2014-11-22 CRAN (R 3.4.0)                  
#>  memoise     1.1.0   2017-04-21 CRAN (R 3.4.0)                  
#>  methods   * 3.4.4   2018-03-15 local                           
#>  R6          2.2.2   2017-06-17 CRAN (R 3.4.0)                  
#>  Rcpp        0.12.16 2018-03-13 CRAN (R 3.4.4)                  
#>  rmarkdown   1.9     2018-03-01 CRAN (R 3.4.3)                  
#>  rprojroot   1.3-2   2018-01-03 CRAN (R 3.4.3)                  
#>  stats     * 3.4.4   2018-03-15 local                           
#>  stringi     1.1.7   2018-03-12 CRAN (R 3.4.4)                  
#>  stringr     1.3.0   2018-02-19 CRAN (R 3.4.3)                  
#>  tools       3.4.4   2018-03-15 local                           
#>  utils     * 3.4.4   2018-03-15 local                           
#>  withr       2.1.2   2018-04-13 Github (jimhester/withr@79d7b0d)
#>  yaml        2.1.18  2018-03-08 CRAN (R 3.4.4)

修改

准确地说,我的问题不在于如何解决这个问题(我可以通过删除打印来完成,就像在第二节中完成的那样),但是关于为什么使用print()打印两次内容。< / p>

2 个答案:

答案 0 :(得分:2)

print返回打印的值,尝试修改此版本:

team <- R6::R6Class("Team",
                    public = list( mail = "colin@thinkr.fr"),
                    private = list(privMail = "colin@thinkr.fr"), 
                    active = list(
                        MailPriv = function(){ print(private$privMail); "hi!" },
                        Mail = function(){ print(self$mail) }
                    )
)
a <- team$new()
> a$MailPriv
[1] "colin@thinkr.fr"
[1] "hi!"

显然主动绑定不支持invisible, 所以将"hi!"更改为invisible()无法提供帮助。

答案 1 :(得分:1)

我不确定我完全理解你的问题,但我认为你有print的一个印刷品和print的退回元素的印刷品。

尝试例如(print(1))

所以,基本上,我会在这里删除print