如何解决包内的整洁评估和 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 )
但是现在如果想像这样使用 mutate:
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
有没有什么办法可以保留管道工作流程,并且在检查包装时不做笔记?
编辑:@Hong oi 提出了一个解决方法并决定结束该问题,但该解决方法不是正确的方法。
更简洁的方法是使用 .data$var
构造。这是我找到答案的地方:https://community.rstudio.com/t/how-to-solve-no-visible-binding-for-global-variable-note/28887/3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。