在开发R包的过程中,使用R CMD check进行检测时,出现许多的NOTE:

  1. checking R code for possible problems ... NOTE
  2. my_fn: no visible binding for global variable mpg

这些NOTE一般是由于某一个变量并没有在全局环境中声明所导致的,解决的方法有多种,具体思路如下:

方案一:

使用globalVariables()函数包裹所有的变量进行全局声明,如:

  1. globalVariables(c("mpg", "hp", "mpg_div_hp"))

对于一些特殊的语法糖符号也可以使用该方法进行声明,如:

  1. globalVariables(c(":=", "!!"))

方案二:

在函数的开始部分对非全局变量进行声明,定义为NULL

  1. my_fn <- function() {
  2. mpg <- hp <- mpg_div_hp <- NULL
  3. mtcars <- data.table::data.table(mtcars)
  4. mtcars[, mpg_div_hp := mpg / hp]
  5. mtcars[]
  6. }

方案三:

该方法主要适用于tidyverse编程的函数,在函数中引入.data进行声明:

  1. # 原函数
  2. my_fn <- function() {
  3. mtcars %>%
  4. mutate(mpg_div_hp = mpg / hp)
  5. }
  1. ## 声明后
  2. #' @importFrom rlang .data
  3. my_fn <- function() {
  4. mtcars %>%
  5. mutate(mpg_div_hp = .data$mpg / .data$hp)
  6. }

Reference:

No visible binding for global variable