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

如何在R中编写宏批量重复单变量分析?报错求助

解决crr循环遍历自变量的报错问题

问题分析

你的代码存在两个核心问题导致报错:

  1. 公式写法与函数参数不匹配:回归公式的分隔符应为~而非=,更关键的是cmprsk包的crr()函数不支持直接传入formula作为协变量参数,它的cov1参数需要的是协变量向量/矩阵,不是公式对象。
  2. 变量环境问题:如果followuptime和followupstatus仅存在于data1数据框中,函数内部可能无法直接定位到这些变量,需要明确指定数据源。

修正后的代码

基础版(遍历单个自变量)

library(cmprsk)

# 遍历指定自变量,逐个拟合竞争风险模型
lapply(c("age", "gender"), function(var) {
  # 提取当前协变量
  covariate <- data1[[var]]
  # 拟合crr模型
  shr_fit <- crr(
    ftime = data1$followuptime,
    fstatus = data1$followupstatus,
    cov1 = covariate,
    cencode = 0,
    failcode = 1
  )
  # 返回模型汇总结果
  summary(shr_fit)
})

优化版(保留自变量名称标识)

如果需要让返回的结果列表每个元素对应自变量名称,方便后续区分,可以用命名向量遍历:

library(cmprsk)

# 创建带名称的自变量列表
target_vars <- setNames(c("age", "gender"), c("age", "gender"))

lapply(target_vars, function(var) {
  covariate <- data1[[var]]
  shr_fit <- crr(
    ftime = data1$followuptime,
    fstatus = data1$followupstatus,
    cov1 = covariate,
    cencode = 0,
    failcode = 1
  )
  summary(shr_fit)
})

额外注意事项

  • 必须提前加载cmprsk包,否则会提示crr()函数不存在。
  • 检查data1中是否存在age、gender、followuptime、followupstatus这些变量,避免拼写错误。
  • 如果协变量是分类变量,可先转为因子类型(as.factor(data1[[var]])),crr会自动处理哑变量。
  • 若数据存在缺失值,需先通过na.omit(data1)或其他方式处理,否则模型拟合会失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:16:05