使用编译器包并禁止“全局变量没有可见绑定”

时间:2014-06-17 08:08:44

标签: r package

我在Ubuntu 14上使用R 3.0.2。我在代码中进行了一些繁重的计算,并尝试了

的“编译器”包
compilePKGS(enable=TRUE)
enableJIT(3)

它似乎加快了我的代码。非常好!

但每次我的包启用“编译器”时,我都会收到很多笔记,比如

Note: no visible binding for global variable '.Data'

或与我自己的S4对象类似的东西(代码中的“obj @ result”):

Note: no visible binding for global variable 'result'

,例如,自制S4对象的一部分。添加setCompilerOptions("suppressAll", TRUE)setCompilerOptions("suppressUndefined", TRUE)没有帮助。当我完全停用编译器包时,根本不会弹出任何注释,所以这可能是我对compiler-package / jit的理解有问题吗?

如何抑制这些音符?

编辑:

require(compiler)
compilePKGS(enable=TRUE)
enableJIT(3)



setClass(Class = "testobject", 
         slots = c( data     = "numeric",   
                    test     = "character", 
                    split    = "numeric",   
                    name     = "character"  
         )
)

a <- new("testobject", data=c(1,2,3,4), test="TEST", split=5, name="NAME")

for(i in a@data){
  print(i)
}

简单的例子产生

Note: no visible binding for global variable '.Data' 
Note: no visible binding for global variable '.Data' 
直接在ClassDefinition Call之后

2 个答案:

答案 0 :(得分:7)

您可以使用

从R中删除这些音符

setCompilerOptions(suppressAll = TRUE)

无需单独抑制&#34; undefined&#34;选项,压制&#34;所有&#34;会做。或者,您可以设置环境变量

export R_COMPILER_SUPPRESS_ALL=true (或类似地在不同的操作系统下)。

如果您只想抑制有关编译器未定义或似乎未定义的变量的警告,您可以

setCompilerOptions(suppressUndefined=TRUE)

如果您只想为变量.Data执行此操作,则可以执行

setCompilerOptions(suppressUndefined=".Data")

另请注意,使用编译器加速代码时无需启用软件包编译,只需启用JIT即可。您可以在示例中从R执行此操作,或者只设置另一个变量

export R_ENABLE_JIT=3

要启用最积极的优化,您还可以设置

export R_COMPILER_OPTIMIZE=3

或来自R run setCompilerOptions(optimize=3)

通过环境变量启用JIT编译时,您不必显式加载编译器包 - 它将自动完成。

答案 1 :(得分:3)

您可以使用例如

来定义全局变量
utils::globalVariables(".Data")

这将阻止“全局变量无可见绑定”注意。

这有利于抑制所有编译器消息的目标;你不会压制其他有用的编译器消息。