Давайте создадим пакет, используем 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