rlang::expr(`=`(!!rlang::ensym(x), !!rlang::as_name(y))) 在 devtools::check() 中导致奇怪的注释
rlang::expr(`=`(!!rlang::ensym(x), !!rlang::as_name(y))) causes weird note in devtools::check()
我在一个函数中使用了以下代码,该函数是我正在编写的 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)))
CRAN 检查不太喜欢 non-standard 评估,所以当它看到你调用 =
函数时,它解释为 <-
函数,它不喜欢它.
当您尝试动态构建命名参数时,rlang
包通过定义 :=
运算符来解决这个问题。所以你可以用
建立你的论点
args <- rlang::exprs(!!rlang::as_name(x) := !!y)
然后将它们注入调用
rlang::expr(foo(!!!args))
# foo(a = "b")
这应该可以防止 CRAN 试图找到特殊的赋值运算符,并且通常应该如何使用 rlang 来达到这样的目的。
这是意料之中的。使用 utils::globalVariables("!<-")
关闭此注释。
我在一个函数中使用了以下代码,该函数是我正在编写的 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)))
CRAN 检查不太喜欢 non-standard 评估,所以当它看到你调用 =
函数时,它解释为 <-
函数,它不喜欢它.
当您尝试动态构建命名参数时,rlang
包通过定义 :=
运算符来解决这个问题。所以你可以用
args <- rlang::exprs(!!rlang::as_name(x) := !!y)
然后将它们注入调用
rlang::expr(foo(!!!args))
# foo(a = "b")
这应该可以防止 CRAN 试图找到特殊的赋值运算符,并且通常应该如何使用 rlang 来达到这样的目的。
这是意料之中的。使用 utils::globalVariables("!<-")
关闭此注释。