我正在写一个使用tidyeval的包。因为我使用tidyeval,所以在描述文件的imports下面列出了rlang。
其中一个函数包含几行使用:=
的代码
就像这样:
data %>%
dplyr::mutate(
!!New_R := AP_R_X*!!X + AP_R_Y*!!Y + AP_R_Z*!!Z,
!!New_U := AP_U_X*!!X + AP_U_Y*!!Y + AP_U_Z*!!Z,
!!New_F := AP_F_X*!!X + AP_F_Y*!!Y + AP_F_Z*!!Z)
代码按预期工作,但在运行devtools::check()
时出现以下注解
no visible global function definition for ':='
我怎样才能去掉这个注解?这不是rlang求值的一部分吗?
编辑:我读了问题“no visible global function definition for ‘median’”,虽然那里的答案解释了为什么会出现这样的问题,但它没有解释为什么在导入rlang
时没有定义:=
,我编辑了这个问题以使其更清楚。
2条答案
按热度按时间erhoui1w1#
在你更新了答案之后,对我来说,这有点像是一个完整的副本,唯一的区别是,你在
DESCRIPTION
中添加了rlang
,而没有看到它和NAMESPACE
指令之间的区别。我模拟了一个示例包来说明这是不够的。首先,我设置了这个包:
然后,我将https://dplyr.tidyverse.org/articles/programming.html中的示例函数添加到文件
R/my_mutate.R
中:注意,这里没有
roxygen2
名称空间标记,我确保在DESCRIPTION
中将rlang
和dplyr
添加到Imports
,然后运行devtools::document()
,当我运行devtools::check()
时,我会得到以下结果:但是,如果我将
R/my_mutate.R
更改为:当我运行
devtools::check()
时(在重新运行document()
之后),我没有得到那个注解。长话短说,
DESCRIPTION
中的Import
是不够的,您还需要NAMESPACE
指令。ig9co6j12#
我想添加一个截至2023年的更新-你现在可以运行
usethis::use_tidy_eval()
来处理这个问题。该函数将自动导入rlang::dyn-dots
,或rlang::
:=``,沿着rlang::enquo
,rlang::enquos
,rlang::.data
,rlang::as_name
,和rlang::as_label
,以处理使用tidyeval
时可能出现的注解。这些注解将出现在一个名为utils-tidy-eval.R
的新文件中。有关更多信息,文档为here。这个函数基本上与接受的答案做同样的事情,但是它创建了一个新文件来保存这些
@importFrom
函数,并且在包中为这些导入创建文档。TLDR:只需运行
usethis::use_tidy_eval()