在R中,是否可以抑制"注意:全局变量没有可见的绑定"?

时间:2014-05-05 14:43:51

标签: r reference-class

我想知道是否有可能在R中抑制这些输出,这会使控制台变得混乱:

Note: no visible binding for global variable '.->ConfigString' 
Note: no visible binding for '<<-' assignment to 'ConfigString' 

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

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

到目前为止我尝试了什么

我尝试过预先定义变量的组合和排列,将它们预先设置为null等,但R仍然固执地打印数百个&#34; No Visible Binding&#34;我的源代码中的注释。

当谈到R的内部时,是否有人比我更聪明?

更新1

我已经尝试将Config <-更改为Config <<-,这样可以摆脱第二个无关的注释。然而,第一个无关的笔记仍然存在。

更新2

我开始心灰意冷,甚至sample code by John Chambers也会产生更多这些可怕的,无关紧要的音符。

更新3

这些注释发生在Revolution R v7.0中,但不会出现在RStudio中。似乎Revolution R v7.0正在调用R CMD check,这通常仅在准备包时使用,因此可以安全地忽略这些注释。

更新4

Hadley Wickhams code also generates these notes。显然,可以使用utils::globalVariables来消除它们,但是,这似乎不适用于较新的ReferenceClasses。即使它完全可以使用它们,哈德利说:

  

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

2 个答案:

答案 0 :(得分: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"))

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

答案 1 :(得分:4)

您可以尝试此命令。

  

compiler :: setCompilerOptions(suppressAll = TRUE)

这对我来说可以抑制像

这样的消息
  

注意:全局变量没有可见的绑定...
  注意:全局函数定义没有可见的绑定...