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

使用quosures在自定义函数中调用公式,r,tidyverse,R,Tidyverse,我试图在自定义函数中运行t-test,但遇到了一个quosure误用(我相信)。任何帮助都将不胜感激 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测试将是更大自定

我试图在自定义函数中运行t-test,但遇到了一个quosure误用(我相信)。任何帮助都将不胜感激

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测试将是更大自定义函数的一部分

Quosure是tidyeval所独有的,并且不是基础R语言所假定的。现在它们只与dplyr一起工作。它们不太可能与基本函数一起工作,例如
t.test

如果你想用base R来做这件事,你可以使用G.格罗森迪克的建议

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

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

tp\u pull替换args通常使用
substitute
完成。e、 g.
tp\u pull@g.Grothendieck你的重写比我的好,所以我更新了我的答案。希望没问题。
tp_pull <- function(mydata, dv, iv){
  t.test(formula(substitute(dv ~ iv)), mydata)
}

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