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

时间:2017-07-08 02:51:16

标签: r tidyverse

我正在尝试在自定义函数中运行t测试,并且遇到了错误的应用(我相信)。任何帮助将不胜感激。

Unofficial.Microsoft.AnalysisServices.AdomdClient

我的错误消息显示为:

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) 

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

1 个答案:

答案 0 :(得分:4)

quosures是tidyeval独有的,并不是基本的R语言所假设的。现在他们只与dplyr合作。这些基本函数(例如OPTIONS

)不太可能

如果你想用基础R做这个,你可以使用G.格洛腾迪克的建议

t.test

替代品从传递给调用的promise中捕获未经验证的符号名称,并允许您将它们重新组合成新的表达式。 tp_pull <- function(mydata, dv, iv){ t.test(formula(substitute(dv ~ iv)), mydata) } tp_pull(mydata = mtcars, dv = mpg, iv = vs) 调用有助于将formula()返回的未经调整的表达式强制转换为正确的R公式对象。