You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用{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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:44:57