Допустим, у меня есть функция в моем пакете
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
проверяет только RHS части mpg_div_hp := mpg / hp
функции.Поэтому включение переменных "mpg"
и "hp"
в функцию globalVariables
- вот почему я столкнулся с этой проблемой.Конечно, я могу использовать опцию object_usage_linter=NULL
для lintr
, но это неудовлетворительно.Второй вариант потребует вектора из> 1000 переменных, что не похоже на хорошее решение.