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

Mar*_*arc 7 r package

我在Ubuntu 14上使用R 3.0.2.我在代码中进行了一些繁重的计算,并尝试了"编译器"包

compilePKGS(enable=TRUE)
enableJIT(3)
Run Code Online (Sandbox Code Playgroud)

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

但每次我的软件包启用"编译器"时,我都会收到很多笔记

Note: no visible binding for global variable '.Data'
Run Code Online (Sandbox Code Playgroud)

或类似于我自己的S4对象(代码中的"obj @ result"):

Note: no visible binding for global variable 'result'
Run Code Online (Sandbox Code Playgroud)

例如,它是自制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)
}
Run Code Online (Sandbox Code Playgroud)

简单的例子产生

Note: no visible binding for global variable '.Data' 
Note: no visible binding for global variable '.Data' 
Run Code Online (Sandbox Code Playgroud)

直接在ClassDefinition调用之后

Tom*_*era 7

您可以使用R来抑制这些音符

setCompilerOptions(suppressAll = TRUE)

没有必要单独抑制"未定义"选项,抑制"所有"将做.或者,您可以设置环境变量

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编译时,您不必显式加载编译器包 - 它将自动完成.