我注意到在检查一个包时,我获得了"全局变量没有可见绑定"的注释,当我使用类似函数时subset,使用列表元素的逐字名称作为参数.
例如,使用数据框:
foo < - data.frame(a = c(TRUE,FALSE,TRUE),b = 1:3)
我可以做愚蠢的事情,比如:
subset(foo,a)
transform(foo,a=b)
Run Code Online (Sandbox Code Playgroud)
哪个工作如预期.然而,R CMD中的R代码检查不理解这些引用元素并且抱怨没有任何可见的全局变量绑定.
虽然这个工作正常,但我真的不喜欢在我的包中加注,并且更喜欢它通过检查而没有任何错误,警告和注释.我也不想过多地修改我的代码.有没有办法编写这些代码,以便明确参数不引用全局变量?
data.table是一个很棒的包,唉,产生无根据的警告checkUsage(代码来自这里和这里):
> library(compiler)
> compiler::enableJIT(3)
> dt <- data.table(a = c(rep(3, 5), rep(4, 5)), b=1:10, c=11:20, d=21:30, key="a")
> my.func <- function (dt) {
dt.out <- dt[, lapply(.SD, sum), by = a]
dt.out[, count := dt[, .N, by=a]$N]
dt.out
}
> checkUsage(my.func)
<anonymous>: no visible binding for global variable ‘.SD’ (:2)
<anonymous>: no visible binding for global variable ‘a’ (:2)
<anonymous>: no visible binding for global variable ‘count’ (:3)
<anonymous>: no visible binding …Run Code Online (Sandbox Code Playgroud)