2017-07-08 136 views
2

我正在尝试在自定义函数中运行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-检验将是一个较大的自定义功能的一部分。

+3

替换参数通常使用'substitute'完成。例如'tp_pull < - 函数(mydata,dv,iv)t.test(公式(替代(dv〜iv)),mydata)' –

+0

@ G.Grothendieck您的重写比我的要好,所以我更新了我的答案。希望没关系。 – MrFlick

回答

4

夸克是tidyeval特有的,并且不是由基本R语言所设想的。现在他们只能使用dplyr。这些将不太可能用于基本功能,如t.test

如果你想与基础R要做到这一点,你可以使用的

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

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

的替补G.格罗腾迪克的建议捕获从传递到调用的承诺未evaulated符号的名称,并允许您重新 - 将它们组装成一个新的表达式。 formula()调用有助于将substitute()返回的未执行表达式转换为适当的R公式对象。

+0

非常感谢你的回应。 – Joe