在你更新了你的答案之后,对我来说,这有点像是一个完全的重复或不是。唯一的区别在于你已经把rlang
添加到了DESCRIPTION
中的Imports
,并且没有看到这与NAMESPACE
指令的区别。
为了展示这种方法是不够的,我制作了一个示例包。首先,我设置了该包:
library(devtools)
create("anExample", rstudio = FALSE, open = FALSE)
接着,我将https://dplyr.tidyverse.org/articles/programming.html中的示例函数添加到文件R/my_mutate.R
中:
my_mutate <- function(df, expr) {
expr <- enquo(expr)
mean_name <- paste0("mean_", quo_name(expr))
sum_name <- paste0("sum_", quo_name(expr))
mutate(df,
!! mean_name := mean(!! expr),
!! sum_name := sum(!! expr)
)
}
注意没有roxygen2
命名空间标签。 我确保在DESCRIPTION
中将rlang
和dplyr
添加到Imports
并运行devtools :: document()
。 然后当我运行devtools :: check()
时,会得到以下结果:
my_mutate: no visible global function definition for ‘enquo’
my_mutate: no visible global function definition for ‘quo_name’
my_mutate: no visible global function definition for ‘mutate’
my_mutate: no visible global function definition for ‘:=’
Undefined global functions or variables:
:= enquo mutate quo_name
0 errors ✔ | 1 warning ✖ | 1 note ✖
然而,如果我将 R/my_mutate.R
更改为以下内容:
my_mutate <- function(df, expr) {
expr <- enquo(expr)
mean_name <- paste0("mean_", quo_name(expr))
sum_name <- paste0("sum_", quo_name(expr))
mutate(df,
!! mean_name := mean(!! expr),
!! sum_name := sum(!! expr)
)
}
在重新执行 document()
后,当我运行devtools::check()
时,我没有看到那个提示。
简而言之,在 DESCRIPTION
中使用 Import
是不够的,您还需要 NAMESPACE
指令。
roxygen2
,请添加一个importFrom
语句。不确定这是来自data.table
、rlang
还是 dplyr 的data.table
后端。 - NelsonGonrlang
。 - duckmayrDESCRIPTION
文件中导入了rlang
,但仍需要NAMESPACE
指令。 - duckmayr