我想知道是否有可能在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是一个可怕的黑客,我永远不会使用它。
答案 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)
这对我来说可以抑制像
这样的消息注意:全局变量没有可见的绑定...
注意:全局函数定义没有可见的绑定...