将列表中的公式传递给 rlang::exec
passing formula in a list to `rlang::exec`
我正在尝试在自定义函数中使用 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
有列表
extra.args <- list(formula = wt ~ am)
exec(
.fn = stats::t.test,
data = mtcars,
!!!extra.args
)
#> Error in t.test.default(data = structure(list(mpg = c(21, 21, 22.8, 21.4, : argument "x" is missing, with no default
我怎样才能让它工作?
我不确定这是 rlang::exec
的错。问题确实与 S3 调度有关,并且根据第一个参数的 class 调用不同的函数,而不是参数的名称。使用当前的调用方法,您将在公式之前传递 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
)
我正在尝试在自定义函数中使用 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
有列表
extra.args <- list(formula = wt ~ am)
exec(
.fn = stats::t.test,
data = mtcars,
!!!extra.args
)
#> Error in t.test.default(data = structure(list(mpg = c(21, 21, 22.8, 21.4, : argument "x" is missing, with no default
我怎样才能让它工作?
我不确定这是 rlang::exec
的错。问题确实与 S3 调度有关,并且根据第一个参数的 class 调用不同的函数,而不是参数的名称。使用当前的调用方法,您将在公式之前传递 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
)