微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何正确记录 R6 自我 Repex

如何解决如何正确记录 R6 自我 Repex

我有一个用 R6class 构建的函数,想知道传递 devtools::check() 的最佳方法是。目前这个 repex 给出了说明

> checking R code for possible problems ... NOTE
  obj_gen : <anonymous>: no visible binding for global variable ‘self’
  Undefined global functions or variables:
    self

它只在实际调用 self 时给出注释。即在打印函数中,但不在初始化中的赋值中。

在 Tidyverse (here) 中,使用了 importFrom R6 R6Class。然而,在这种情况下,在打印函数调用 self 似乎触发了全局变量注释。

Repex

#' func
#' @param ... opts
#' @examples
#'\dontrun{
#' obj_gen(bar = "fubar")
#'}
obj_gen <- function(...){

  #' @importFrom R6 R6Class
  obj <- R6::R6Class("my_class",public = list(
                foo = NULL,initialize = function(bar = NA){
                  self$foo <- bar
                },print = function(){
                  cat("Anyone for ",self$foo,"?",sep = "")
                }
              )
  )
  obj$new(...)
}

一位同事非常有帮助地建议将其添加到我正在考虑的 globalVariables(info) 中。我想知道是否有更好的方法来处理它,使用文档,但是:)

我的 Roxygen 版本是 7.1.1。

解决方法

具有虚拟 self <- NA 定义的解决方案。

#' func
#' @param ... opts
#' @import R6
#' @examples
#'\dontrun{
#' obj_gen(bar = "fubar")
#'}
obj_gen <- function(...){
  self <- NA
  obj <- R6Class("my_class",public = list(
                       foo = NULL,initialize = function(bar = NA) {
                         self$foo <- bar
                       },print = function() {
                         cat("Anyone for ",self$foo,"?",sep = "")
                       }
                     )
  )
  obj$new(...)
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。