如何在R中编写宏批量重复单变量分析?报错求助
解决crr循环遍历自变量的报错问题
问题分析
你的代码存在两个核心问题导致报错:
- 公式写法与函数参数不匹配:回归公式的分隔符应为
~而非=,更关键的是cmprsk包的crr()函数不支持直接传入formula作为协变量参数,它的cov1参数需要的是协变量向量/矩阵,不是公式对象。 - 变量环境问题:如果
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
相关产品推荐
相关产品推荐

