假设我的包中有一个函数
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"globalVariablesobject_usage_linter=NULLlintr