3

假设我的包中有一个函数

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

我的问题是为什么会这样?有关更多上下文,请继续阅读。

似乎有两个“简单”的解决方案:

  1. 不要在我的package.R文件中定义任何变量,并允许codetools选择处理所有变量。
  2. 在函数中定义所有全局变量globalVariables(),不要使用该codetools选项。

不幸的是,如果您想使用该lintr包,则第一个选项不是很好,因为lintr仅检查该mpg_div_hp := mpg / hp部分功能的 RHS。所以在函数"mpg"中包含变量是我遇到这个问题的原因。当然我可以使用 的选项,但这感觉并不令人满意。第二个选项需要一个大于 1000 个变量的向量,这感觉不是一个好的解决方案。"hp"globalVariablesobject_usage_linter=NULLlintr

4

0 回答 0