在 R 中,是不是可以禁止“注意:全局变量没有可见绑定”?

Posted

技术标签:

【中文标题】在 R 中,是不是可以禁止“注意:全局变量没有可见绑定”?【英文标题】:In R, is it possible to suppress "Note: no visible binding for global variable"?在 R 中,是否可以禁止“注意:全局变量没有可见绑定”? 【发布时间】:2014-06-21 22:08:04 【问题描述】:

我想知道是否有可能在 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 仍然顽固地在我的源代码中打印数百个“无可见绑定”注释。

在 R 的内部结构方面,有没有人比我更聪明?

更新 1

我尝试将Config &lt;- 更改为Config &lt;&lt;-,这样就去掉了第二个无关注释。但是,第一个无关注释仍然存在。

更新 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。即使完全可以使用它们,Hadley 表示:

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

【问题讨论】:

你见过this吗? 如果您阅读了我所链接的内容,您就不会将这些称为“可怕的无关错误”。可怕,也许吧。毫无疑问,无关紧要。错误?甚至没有关闭。 @joran 你说得对,我把“error”改成了“note”。 在函数开头(在使用这些变量之前)添加类似ConfigString &lt;- NULL 的内容也会使注释消失。 @Tyler Rinker 你是对的,这解决了问题。我在下面添加了一个答案,我希望这里有一些方法可以给你的答案 10 票! 【参考方案1】:

此答案归功于@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运行了很长时间,有时可能需要重新启动。

【讨论】:

这比使用utils::globalVariables 更“可怕”吗?【参考方案2】:

你可以试试这个命令。

编译器::setCompilerOptions(suppressAll = TRUE)

这对我来说可以抑制类似的消息

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

【讨论】:

以上是关于在 R 中,是不是可以禁止“注意:全局变量没有可见绑定”?的主要内容,如果未能解决你的问题,请参考以下文章

我是不是可以因为看到真实广告(展示次数)而被禁止使用 AdMob?

我是不是可以因为看到真实广告(展示次数)而被禁止使用 AdMob?

如何检查成员是不是可以在 discord.js v12 中被踢/禁止?

TypeScript - 是不是有一个选项可以禁止在除布尔值之外的任何内容前面使用“!

电脑Google浏览器该网页已被禁止怎么办?

const 引用函数参数:是不是可以禁止临时对象?