假设我的包中有一个函数
my_fn <- function() {
mtcars_dt <- data.table::data.table(mtcars)
mtcars_dt[, mpg_div_hp := mpg / hp]
mtcars_dt
}
在我的.Renviron
我有设置_R_CHECK_CODETOOLS_PROFILE_="suppressUndefined=TRUE"
。这将确保在codetools
运行包时R CMD check
,它不会返回任何警告,例如
my_fn: no visible binding for global variable 'mpg_div_hp'
但是,如果我定义了一些全局变量,例如
utils::globalVariables(c("mpg", "hp"))
在我的包文档中,会将所有变量R CMD check
标识为未绑定。就好像该函数正在覆盖我的文件中的选项。globalVariables()
"suppressUndefined=TRUE"
.Renviron
我的问题是为什么会这样?有关更多上下文,请继续阅读。
似乎有两个“简单”的解决方案:
- 不要在我的
package.R
文件中定义任何变量,并允许codetools
选择处理所有变量。 - 在函数中定义所有全局变量
globalVariables()
,不要使用该codetools
选项。
不幸的是,如果您想使用该lintr
包,则第一个选项不是很好,因为lintr
仅检查该mpg_div_hp := mpg / hp
部分功能的 RHS。所以在函数"mpg"
中包含变量是我遇到这个问题的原因。当然我可以使用 的选项,但这感觉并不令人满意。第二个选项需要一个大于 1000 个变量的向量,这感觉不是一个好的解决方案。"hp"
globalVariables
object_usage_linter=NULL
lintr