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

R语言多列批量运行paired t-test报错如何解决

数据集多列指标t检验代码报错修正

问题说明

需要对FAI_SLS数据集中研究侧(study_side取值为"Study")的多个关节角度指标执行t检验,分析各指标从基线到随访1年的变化,先后编写两段代码均运行失败。

失败代码1及报错

res <- FAI_SLS %>% 
  filter(study_side == "Study")%>%
  select(-id,-subject,-activity,-side,-study_side,-year) %>%
  map_df(~ broom::tidy(t.test(. ~ year)), .id = 'var')

运行返回报错:

Error in eval(predvars, data, env) : object 'year' not found
移除select()语句中的-year参数后,仍返回相同报错。

失败代码2及报错

t(sapply(FAI_SLS%>%filter(study_side == "Study")%>%select(-id,-subject,-activity,-side,-study_side,-year), function(x) 
     unlist(t.test(x~FAI_SLS$year)[c("estimate","p.value","statistic","conf.int"])))

运行返回报错:

Error in h(simpleError(msg, call)) :
error in evaluating the argument 'x' in selecting a method for function 't': variable lengths differ (found for 'FAI_SLS$year')
移除select()语句中的-year参数后,问题仍未解决。

报错核心原因

  • 代码1:select()步骤提前删除了分组列year,后续t.test()的公式接口无法找到分组变量;即使保留year列,map_df()默认会遍历所有传入列,会将year本身作为待检验指标传入模型,仍无法正常运行。
  • 代码2:filter(study_side == "Study")已经对原数据集做了行筛选,但t检验调用的分组变量是未经过滤的全量数据集列FAI_SLS$year,和筛选后的指标列行数不匹配,触发长度报错。

可运行修正方案

注:由于是同一组受试者基线到随访1年的前后对比,属于配对设计,t检验建议加paired = TRUE参数执行配对t检验;若设计为独立样本,保留默认参数即可。

方案1:tidyverse + broom 风格(对齐原代码1逻辑)

核心是保留分组列year,遍历指标列时排除分组变量,通过动态构建公式保证变量能被正确识别:

library(tidyverse)
library(broom)

res <- FAI_SLS %>% 
  filter(study_side == "Study") %>%
  # 仅移除无关ID类列,保留分组列year和所有关节角度指标
  select(-id, -subject, -activity, -side, -study_side) %>%
  map_df(
    .x = setdiff(names(.), "year"), # 遍历除分组列year外的所有指标
    .f = ~ t.test(reformulate("year", response = .x), data = ., paired = TRUE) %>% tidy(),
    .id = "var"
  )

方案2:base R 风格(对齐原代码2逻辑)

核心是提前存储过滤后的分析数据集,分组变量从过滤后的数据中提取,保证长度匹配:

# 提前存储过滤后的分析集,避免变量长度不匹配
analysis_set <- FAI_SLS %>% filter(study_side == "Study")

res <- t(sapply(
  X = analysis_set %>% select(-id, -subject, -activity, -side, -study_side, -year),
  FUN = function(x) {
    t.test(x ~ analysis_set$year, paired = TRUE)[c("estimate","p.value","statistic","conf.int")] %>% unlist()
  }
))

内容的提问来源于stack exchange,提问作者Edgar Garcia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:31:27