.Renviron被globalVariables覆盖

时间:2019-06-13 10:14:54

标签: r data.table lintr

假设我的包装中有一个函数

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将把 all 变量标识为未绑定。好像globalVariables()函数正在覆盖我的"suppressUndefined=TRUE"文件中的.Renviron选项。

我的问题是为什么会这样?有关更多背景信息,请继续阅读。

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

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

不幸的是,如果您想使用lintr包,则第一个选项不是很好,因为lintr仅检查函数mpg_div_hp := mpg / hp部分的RHS。因此,在"mpg"函数中包含变量"hp"globalVariables就是为什么我遇到这个问题的原因。当然,我可以为object_usage_linter=NULL使用lintr选项,但这并不令人满意。第二种选择将需要一个大于1000个变量的向量,这似乎不是一个很好的解决方案。

0 个答案:

没有答案