【发布时间】:2020-08-18 15:16:11
【问题描述】:
我在作为我正在编写的 R 包的一部分的函数中使用以下代码:
x = "a"
y = "b"
rlang::expr(`=`(!!rlang::ensym(x), !!rlang::as_name(y)))
它会自动为函数创建参数,如下所示:
a = "b"
然后可以将其插入到这样的函数中:
foo(a = "b")
问题是,当我运行 devtools::check() 函数时,由于这部分代码,我得到了一个注释。
my_function : <anonymous>: no visible global function definition for '!<-'
我认为问题在于 bang-bang (!!) 和 = 函数,但我真的不知道如何解决这个问题。
如果有人知道如何防止出现此注释,那就太好了!非常感谢!
编辑:根据 MrFlick 的回答,我现在使用以下内容:
x = c("a", "b")
y = c("y", "z")
args <- purrr::map2(.x = x,
.y = y,
.f = function(x, y){
rlang::exprs(!!rlang::as_name(x) := !!y)
})
rlang::expr(foo(!!!unlist(args)))
【问题讨论】:
-
您是否将
!!来自rlang放入您的命名空间?我通常在NULL函数上添加@importFrom rlang !!,这样我就不必反复调用rlang::。 -
是的,我在我的命名空间中定义了
@importFrom rlang as_name ensym expr !!,但我仍然收到注释。我通常用::来指代每个函数,以明确它是什么包。但是,是的,@importFrom就足够了。
标签: r package devtools tidyeval