首页 > 解决方案 > 语法糖 || '.' 检查失败 || 如何导入或设置全局变量?

问题描述

#create package

devtools::create("./brainy",rstudio=F)

usethis::use_package("dplyr", type = "import", min_version = TRUE) ## set dependancy

我有一个使用%>%from的小功能dplyr。我.在管道时也使用。不知道从哪里导入或者在ing 包.时如何实现对齐check()

我的小 R 代码如下所示:

add<-function(x,y){ 
#' Package provides sample data that are loaded with package loading. 
#' @param a and y are variables
#' #not RUN
#' @importFrom dplyr %>%

data_test<-data.frame(ID=c(seq(1:10)), NAME=c(paste("ID",seq(1:10),sep="_")))

data_test$NAME<-data_test$NAME %>%  gsub("_*","",.) # for getting warning about .

return(x+y)

}

我创建了一个测试数据来提出问题并重现它。

我运行以下内容:

devtools::document()  
devtools::check()

我收到警告为:

  add: no visible binding for global variable ‘.’
  Undefined global functions or variables:
    .

如何设置我的代码check().. 下面的资源建议放入 globalVariables,但是我在哪里(函数,文件)设置全局变量?

希望最后一个问题 - 我应该使用以下哪一项以及为什么:

usethis::use_package("dplyr", type = "Depends", min_version = TRUE)

usethis::use_package("dplyr", type = "import", min_version = TRUE)

https://www.r-bloggers.com/no-visible-binding-for-global-variable/

工具版本

dplyr_1.0.0
usethis_1.6.1
devtools_2.3.1
rmarkdown_2.3
R 4.0.0 (2020-04-24)

标签: rdplyrglobal-variablesdevtools

解决方案


根据要求,我将我的评论变成了答案,因为这些也可能在未来对其他人有所帮助。

通常可以通过定义变量来绕过全局变量的无可见绑定utils::globalVariables错误。不幸的是,这不适用于..

相反,应该坚持使用tidyverse-like 语法并使用mutateor之类的替代方法.data。在tidyverse风格上,addadd_fn此处命名以避免名称冲突)可以重写如下:


add_fn<-function(x,y){
  #' Package provides sample data that are loaded with package loading.
  #' @param x some variable
  #' @param y another variable
  #' @importFrom dplyr %>% mutate


  data_test<-data.frame(ID=c(seq(1:10)),
                        NAME=c(paste("ID",seq(1:10),sep="_")))

  data_test<-data_test %>%
       mutate({{NAME = gsub("_*","",NAME)}})

  return(x+y)

}

以上使用{{}}from通过非标准评估rlang进行解析。NAME

或者,在这个特定示例中,根本不需要使用tidyverse

add_fn<-function(x,y){
  #' Package provides sample data that are loaded with package loading.
  #' @param x some variable
  #' @param y another variable
  #' @importFrom dplyr %>% mutate


  data_test<-data.frame(ID=c(seq(1:10)),
                        NAME=c(paste("ID",seq(1:10),sep="_")))

  data_test$NAME<-gsub("_*","",data_test$NAME)

  return(x+y)

}

检查结果:


-- R CMD check results ------------------------------------- brainy 0.0.0.9000 ----
Duration: 1m 38.7s

0 errors √ | 0 warnings √ | 0 notes √



推荐阅读