синтаксис c сахар || проверка не выполняется для '.' || как мне импортировать его или установить глобальную переменную? - PullRequest
1 голос
/ 06 августа 2020

#create package

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

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

У меня есть небольшая функция, в которой я использую %>% из dplyr. Также я использую . при прокладке труб. Я не знаю, откуда . импортирован или как добиться его выравнивания, когда 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)

1 Ответ

1 голос
/ 08 августа 2020

По запросу я превращаю свои комментарии в ответ, поскольку они могут также помочь кому-то еще в будущем.

Обычно возможно go вокруг без видимой привязки для глобальной переменной ошибка при определении переменной с помощью utils::globalVariables. К сожалению, это не сработает с ..

Вместо этого следует придерживаться синтаксиса, подобного tidyverse, и использовать альтернативы, такие как mutate или .data. В стиле tidyverse, add (названный add_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)

}

В приведенном выше примере {{}} из rlang используется для синтаксического анализа NAME с помощью нестандартной оценки.

В качестве альтернативы, в этом конкретном примере c нет необходимости использовать 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 √


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...