如何解决 R CMD check 出现 NOTE: "no visible binding for global variable"


NSE (非标准话求值) 允许直接对数据的变量进行操作,如subset()函数。虽然初始目的是为了交互运行的时候减少代码输入方便计算,随着 tidyverse 兴起,大大增加了数据分析 效率,NSE 用途也越来越广,许多新开发的包都依赖一些采用了 NSE 的函数。在 R CMD check的时候出现 就出现由 NSE 引起的 NOTE no visible binding for global variable, Undefined global functions or variables <variable name>。这是由于 实际函数运行环境中并不包含这些变量,所以在R CMD check 的时候会抛出NOTE。虽然 CRAN 中允许有NOTE,为了维护方便最好是把 NOTE 也都解决。有两种解决办法。

1. 用globalVariables(c("<var>")), 如可以在R/下新建一个脚本,调用

globalVariables()声明所有变量

常用的是通过.onLoad函数:

  .onLoad <- function (libname, pkgname)
  {
    # set global variables in order to avoid CHECK notes
    utils::globalVariables ("<var>")
    invisible ()
  }

2. 使用rlang::.data,记得依赖中加入rlang和导出.data,以dplyr::filter为例

  dplyr::filter(df, var > 1)
  # 修改为
  dplyr::filter(df, .data$var > 1)

我之前是采用的第一种方法,但是总是忘记哪些变量变量需要添加,现在采用第二种方法 在写代码的时候直接用.data,缺点就是跟平时交互式计算的时候写法不一致,有时候也 会忘记。

Reference


一路嘿嘿

Bioinformatics, R enthusiast. Thoughts on reasarch, personal experience and other distractions.

Tags

blogdown font ggplot git github github pages Homebrew html hugo icon liner algebra linux machine learning R scholar sublime text 3 tidyverse