我已经解决了"没有可见的绑定的变体"注意到在检查他们的包裹时会得到。但是,我无法在适用于'<< - '分配
具体来说,我在几个函数中定义并使用了局部变量,例如:
fName = function(df){
eval({vName<<-0}, envir=environment(fName))
}
然而,当我从devtools运行check()时,我收到错误:
fName: no visible binding for '<<-' assignment to 'vName'
所以,我尝试使用不同的语法,如下所示:
fName = function(df){
assign("vName",0, envir=environment(fName))
}
但得到了check()错误:
cannot add bindings to a locked environment
当我尝试时:
fName = function(df){
assign("vName",0, envir=environment(-1))
}
我收到了错误:
use of NULL environment is defunct
所以,我的问题是我如何完成赋值运算符&lt;&lt; - 而无需在devtools的check()中获取注释。
谢谢。
答案 0 :(得分:3)
答案很简单 - 不要在包裹中使用<<-
。您可以通过一种Alterna方式对环境进行分配(但不是有意义的分配)是创建锁定绑定。
e <- new.env()
e$vName <- 0L
lockBinding("vName", e)
vName
# Error: object 'vName' not found
with(e, vName)
# [1] 0
e$vName <- 5
# Error in e$vName <- 5 : cannot change value of locked binding for 'vName'
你也可以锁定一个环境,但不是一个有意义的环境。
lockEnvironment(e)
rm(vName, envir = e)
# Error in rm(vName, envir = e) :
# cannot remove bindings from a locked environment
看看help(bindenv)
,这是一个很好的阅读。
已更新由于您提到您可能正在等待分配而非加载时间,请阅读help(globalVariables)
这是?
对于
globalVariables
,提供的名称是函数或其他对象,当检查工具应用于此包时,应将其视为全局定义。对globalVariables的调用将包含在包的源代码中。同一个包中的重复调用会累积全局变量的名称。