“<< - ”分配没有可见的绑定

时间:2015-02-04 02:17:11

标签: r package

我已经解决了"没有可见的绑定的变体"注意到在检查他们的包裹时会得到。但是,我无法在适用于'<< - '分配

具体来说,我在几个函数中定义并使用了局部变量,例如:

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()中获取注释。

谢谢。

1 个答案:

答案 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的调用将包含在包的源代码中。同一个包中的重复调用会累积全局变量的名称。