使用 quosures 在自定义函数中调用公式

Calling a formula within a custom function using quosures

我正在尝试 运行 自定义函数中的 t 检验,并且 运行 正在误用定标(我相信)。任何帮助将不胜感激。

library(tidyverse) 

tp_pull <- function(mydata, dv, iv){
  dv <- enquo(dv)
  iv <- enquo(iv)
  t.test(!!dv ~ !!iv, mydata) 
}

tp_pull(mydata = mtcars, dv = mpg, iv = vs) 

我的错误信息是:

numerical expression has 2 elements: only the first usedNAs introduced by 
coercion
Show Traceback
Error in quo_name(dv):~!(!iv) : NA/NaN argument

对于上下文,此 t 检验将成为更大的自定义函数的一部分。

Quosures 是 tidyeval 独有的,基本 R 语言不支持。现在他们只使用 dplyr。这些不太可能与 t.test.

等基本函数一起使用

如果你想用 base R 做这个,你可以使用 G. Grothendieck 的建议

tp_pull <- function(mydata, dv, iv){
  t.test(formula(substitute(dv ~ iv)), mydata)
}

tp_pull(mydata = mtcars, dv = mpg, iv = vs) 

替换从传递给调用的承诺中捕获未评估的符号名称,并允许您将它们重新 assemble 到一个新的表达式中。 formula() 调用有助于将 substitute() 返回的未计算表达式强制转换为适当的 R 公式对象。