如何使用{rlang}创建配对t检验的公式?
解决rlang构建配对t检验公式接口的错误
你遇到的错误是因为配对t检验的公式构造方式不正确:new_formula(quote(Pair(x, y)), 1)生成了无效的Pair(x,y) ~ 1公式,R无法解析Pair(x,y)这个不存在的表达式,导致model.frame报错。
错误原因
Pair不是R原生函数,无法被公式解析器识别new_formula的参数顺序是左侧表达式在前,右侧表达式在后,你写的new_formula(quote(Pair(x, y)), 1)会生成Pair(x,y) ~ 1,完全不符合t.test的公式要求- 配对t检验的公式形式无需特殊构造:对于长格式数据(分组变量+响应变量),公式依然是
响应变量 ~ 分组变量,只需通过paired=TRUE告诉t.test按配对方式计算
修正后的代码
library(rlang) two_sample_t_test <- function(data, x, y, paired, ...) { x <- ensym(x) y <- ensym(y) exec( t.test, formula = new_formula(y, x), # 统一使用响应变量~分组变量的公式形式 data = data, paired = paired, # 直接传递配对参数给t.test ... ) } # 独立样本t检验 two_sample_t_test(mtcars, am, wt, paired = FALSE, var.equal = TRUE) # 配对t检验(注意:mtcars数据本身没有配对结构,此处仅验证代码运行) two_sample_t_test(mtcars, am, wt, paired = TRUE)
补充:如果是宽格式成对数据
如果你的数据是宽格式(每行是一对观测,包含两个变量),比如有wt0和wt1两个成对变量,可调整公式为wt0 ~ wt1,函数修改如下:
two_sample_t_test_wide <- function(data, x, y, ...) { x <- ensym(x) y <- ensym(y) exec( t.test, formula = new_formula(x, y), data = data, paired = TRUE, ... ) } # 示例(需自行构造宽格式数据) # two_sample_t_test_wide(wide_data, wt0, wt1)
内容的提问来源于stack exchange,提问作者Indrajeet Patil
相关产品推荐
相关产品推荐

