Аккуратная оценка внутри пакета и примечания devtools::check()

Давайте создадим пакет, используем dplyr и канал magrittr и создадим новую функцию:

usethits::create_package("TidyEvalInsidePackage")
usethis::use_package_doc()
usethis::use_package("dplyr")
usethis::use_pipe(export = F)
devtools::document()
usethis::use_r("foo")

Внутри foo.R:

foo <- function() {
  df <- data.frame(N = 1:10)
  df %>% 
     dplyr::select(N) ## This will produce a note when I run devtools::check()
}

Производит: foo: no visible binding for global variable 'N'

Эту заметку можно легко удалить следующим образом:

 df %>% 
     dplyr::select( df$N )

Но теперь, если вы хотите использовать мутацию следующим образом:

foo <- function() {
  df <- data.frame(N = 1:10)
  df %>% 
     dplyr::mutate(X = pi^N,
                   Y = X / N))
}

Трюк больше не работает:

df
  %>% dplyr::mutate(X = pi^df$N,
                    Y = df$X / df$N) ## coz at this line df$X does not exist

Есть ли способ сохранить рабочий процесс pipe и сделать это без создания заметок при проверке пакета?


РЕДАКТИРОВАТЬ: @Hong oi предложил обходной путь и решил закрыть вопрос, но обходной путь не является правильным способом сделать это.

Более чистый способ — использовать конструкцию .data$var. Вот где я нашел ответ: https://community.rstudio.com/t/how-to-solve-no-visible-binding-for-global-variable-note/28887/3


person pietrodito    schedule 21.03.2021    source источник
comment
Пожалуйста, рассмотрите мое редактирование, это не дубликат, и есть более чистый способ, чем обходной путь, который вы используете.   -  person pietrodito    schedule 21.03.2021
comment
@pietrodito Я знаю, что уже немного поздно (хорошо, сильно поздно), но я нашел ваш вопрос в очереди на повторное открытие. Я добавил несколько других повторяющихся целей, но если вы по-прежнему не согласны с тем, что это дубликат, я снова открою его для вас. Просто @упомяните меня.   -  person Ian Campbell    schedule 12.05.2021