如何解决rlang :: expr`=`!! rlang :: ensymx,!! rlang :: as_namey在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 '!<-'
我认为问题是与=
函数一起使用的(!!),但我真的不知道该如何解决。
如果某人对如何防止出现此提示有想法,那就太好了!非常感谢!
编辑:基于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检查确实不喜欢非标准评估,因此,当您看到调用被解释为=
函数的<-
函数时,它就不喜欢它。
在尝试动态构建命名参数时,rlang
包通过定义:=
运算符来解决此问题。因此,您可以使用
args <- rlang::exprs(!!rlang::as_name(x) := !!y)
然后使用
将其注入通话rlang::expr(foo(!!!args))
# foo(a = "b")
那应该防止CRAN试图找到特殊的赋值运算符,并且通常是应该如何使用rlang来实现这一目的。
,这是预期的。使用code
使此注释静音。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。