使用 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 公式对象。
我正在尝试 运行 自定义函数中的 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 公式对象。