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

如何在R中批量执行多变量独立t检验?解决代码报错

批量执行独立t检验的报错解决方法

问题场景

原本需要逐个编写代码对每个自变量执行独立t检验:

t.test(Age~composite_renal_march2020,data = DN_DKK3,var.equal=TRUE)
t.test(HbA1c~composite_renal_march2020,data = DN_DKK3,var.equal=TRUE)

尝试用管道批量处理时写出以下代码,但持续报错:

DN_DKK3 %>% 
  select(-SampleID) %>% 
  group_by(Age, HbA1c) %>% 
  t.test(~composite_renal_march2020, var.equal = TRUE)

报错信息:

Error in vec_c():
! Can't combine composite_renal_march2020 and RetinopathyGrade13 .
Run rlang::last_trace() to see where the error occurred.

回溯信息:

▆
1. ├─... %>% t.test(~composite_renal_march2020, var.equal = TRUE)
2. ├─stats::t.test(., ~composite_renal_march2020, var.equal = TRUE)
3. └─stats:::t.test.default(., ~composite_renal_march2020, var.equal = TRUE)
4. ├─x[xok]
5. ├─dplyr:::`[.grouped_df`(x, xok)
6. ├─base::NextMethod()
7. └─tibble:::`[.tbl_df`(x, xok)
8.  └─tibble:::tbl_subset_matrix(x, j, j_arg)
9.    ├─base::unname(vec_c(!!!values, .name_spec = ~.x))
10.   └─vctrs::vec_c(!!!values, .name_spec = ~.x)

警告信息:

In is.na(y) : is.na() applied to non-(list or vector) of type 'language'

错误原因

  1. group_by用法错误:group_by(Age, HbA1c)是将数据按Age和HbA1c的组合分组,这和你要对每个自变量分别与composite_renal_march2020做t检验的需求完全不符,反而会让数据结构混乱。
  2. t.test公式与输入不匹配:管道传递的是分组后的数据框,而t.test(~composite_renal_march2020)的写法不符合独立t检验的公式逻辑(正确逻辑应为自变量~分组变量),导致函数无法正确解析输入类型。

解决方案

方法1:用purrr批量遍历变量

借助purrr的map函数,遍历目标自变量列表,为每个变量构造正确的t检验公式:

library(tidyverse)

# 指定需要检验的自变量
target_vars <- c("Age", "HbA1c")

# 批量执行t检验,返回带变量名的结果列表
map(target_vars, 
    ~t.test(reformulate("composite_renal_march2020", response = .x),
            data = DN_DKK3, 
            var.equal = TRUE)) %>%
  set_names(target_vars)

方法2:转长格式后分组提取结果

将数据转成长格式,按自变量分组后执行t检验,并提取关键统计量整理成表格:

DN_DKK3 %>%
  # 保留分组变量和目标自变量
  select(composite_renal_march2020, Age, HbA1c) %>%
  # 转长格式,方便分组处理
  pivot_longer(cols = -composite_renal_march2020, 
               names_to = "自变量", 
               values_to = "数值") %>%
  group_by(自变量) %>%
  summarize(
    t检验结果 = list(t.test(数值 ~ composite_renal_march2020, var.equal = TRUE)),
    t值 = t检验结果[[1]]$statistic,
   自由度 = t检验结果[[1]]$parameter,
    p值 = t检验结果[[1]]$p.value
  )

内容的提问来源于stack exchange,提问作者Janus Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:55:28