在R中,是否可以禁止显示“注:全局变量无可见绑定”?

Con*_*ngo 5 r reference-class

我想知道是否有可能抑制R中的这些混乱控制台的输出:

Note: no visible binding for global variable '.->ConfigString' 
Note: no visible binding for '<<-' assignment to 'ConfigString' 
Run Code Online (Sandbox Code Playgroud)

这是代码(它是一个简单的ReferenceClass,用于存储R项目的配置):

# Reference Class to store configuration
Config <- setRefClass("Config",
  fields = list(    
    ConfigString = "character"
    ),
    methods = list(
        # Constructor
        initialize = function() {
            ConfigString <<- "Hello, World!"
        }
  )
)
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的

我曾经尝试过组合和排列预定义变量,将它们预先设置为null等,但是R仍然顽固地在源代码中打印数百个“无可见绑定”注释。

在R的内部方面,有人比我聪明吗?

更新1

我尝试将更Config <-改为Config <<-,从而摆脱了第二个多余的音符。但是,第一个无关的音符仍然存在。

更新2

我开始感到沮丧,甚至约翰·钱伯斯(John Chambers)的示例代码也产生了更多这些可怕的无关紧要的笔记。

更新3

这些说明出现在Revolution R v7.0中,但没有出现在RStudio中。好像Revolution R v7.0正在调用R CMD check,通常仅在准备软件包时使用,因此可以安全地忽略这些注释。

更新4

Hadley Wickhams代码也会生成这些注释。显然,可以使用来消除它们utils::globalVariables,但是,这似乎不适用于较新的ReferenceClass。即使有可能使用它们,哈德利也指出:

globalVariables是一个可怕的技巧,我永远不会使用它。

Con*_*ngo 5

所有答案都归功于@Tyler Rinker。

为了消除这些注释,请在上面的源代码之前添加以下代码:

# Intent:
#   This function suppresses the following notes generated by "R CMD check":
#   - "Note: no visible binding for global variable '.->ConfigString'"
#   - "Note: no visible binding for '<<-' assignment to 'ConfigString'"
# Usage:
#   Add the following right in the beginning of the .r file (before the Reference
#   class is defined in the sourced .r file):
#   suppressBindingNotes(c(".->ConfigString","ConfigString"))
suppressBindingNotes <- function(variablesMentionedInNotes) {
    for(variable in variablesMentionedInNotes) {
        assign(variable,NULL, envir = .GlobalEnv)       
    }
}

suppressBindingNotes(c(".->ConfigString","ConfigString"))
Run Code Online (Sandbox Code Playgroud)

此外,如果Revolution R已经运行了很长时间,则有时可能需要重新启动它。

  • 这是否比使用`utils :: globalVariables`少“丑陋”? (2认同)