如何解决将列表中的公式传递给 `rlang::exec`
我试图在自定义函数中使用 Foo.bar
,我想在其中将附加参数作为列表传递,然后拼接它们。通常这没有任何问题。但是当涉及 rlang::exec
参数时,我在执行此例程时遇到了问题。
无列表
formula
带列表
library(rlang)
exec(
.fn = stats::t.test,formula = wt ~ am,data = mtcars
)
#>
#> Welch Two Sample t-test
#>
#> data: wt by am
#> t = 5.4939,df = 29.234,p-value = 6.272e-06
#> alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
#> 95 percent confidence interval:
#> 0.8525632 1.8632262
#> sample estimates:
#> mean in group 0 mean in group 1
#> 3.768895 2.411000
我怎样才能让它工作?
解决方法
我不确定这是 rlang::exec
的错。问题确实与 S3 调度以及基于第一个参数的类而不是参数名称调用不同函数的事实有关。使用您当前的调用方法,您将在公式之前传递 data=
。这在直接调用函数时也会出现问题
stats::t.test(data=mtcars,formula=wt~am)
解决此问题的最简单方法是以“自然”顺序传递参数,以便进行适当的 S3 调度
extra.args <- list(formula = wt ~ am)
exec(
.fn = stats::t.test,!!!extra.args,data = mtcars
)
或保留公式参数未命名,使其成为第一个未命名参数。
extra.args <- list(wt ~ am)
exec(
.fn = stats::t.test,data = mtcars,!!!extra.args
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。