R语言randomForestSRC中传递字符串列名构建随机生存森林问题
解决randomForestSRC中动态传递字符串变量名构建公式的问题
直接在rfsrc的公式中使用字符串变量会导致解析错误,因为R会将公式中的符号当作数据框的列名查找,而非读取变量的字符串值。以下两种方法可以解决这个问题,且支持分步骤添加多个变量:
方法1:使用reformulate()构建公式(推荐)
reformulate()可以直接接收字符串向量作为自变量,快速构建公式对象,非常适合动态添加变量的场景:
library(randomForestSRC) # 定义单个字符串变量 New_Var <- "Variable1" # 动态生成公式:指定因变量和自变量 formula_obj <- reformulate(termlabels = New_Var, response = "Surv(Censored_Time, Outcome)") # 训练模型 rsf_model <- rfsrc(formula_obj, data=df, ntree=1000, mtry=5, min.node.size =3, importance = TRUE)
如果需要分步骤添加多个变量,只需扩展自变量向量即可:
# 初始化变量列表 vars <- c("Variable1") # 按顺序添加新变量 vars <- c(vars, "Variable2", "Variable3") # 重新生成公式 formula_obj <- reformulate(termlabels = vars, response = "Surv(Censored_Time, Outcome)")
方法2:拼接字符串后转为公式对象
手动拼接公式字符串,再用as.formula()转换为公式对象:
library(randomForestSRC) New_Var <- "Variable1" # 拼接公式字符串 formula_str <- paste0("Surv(Censored_Time, Outcome) ~ ", New_Var) # 转换为公式对象 formula_obj <- as.formula(formula_str) # 训练模型 rsf_model <- rfsrc(formula_obj, data=df, ntree=1000, mtry=5, min.node.size =3, importance = TRUE)
为什么之前的尝试无效?
df[["Variable1"]]会直接提取变量的数值,而非列名,公式无法识别这种数值对象;noquote()和deparse(substitute())仅处理字符串的显示格式,无法改变R对公式符号的解析逻辑,公式仍会将New_Var当作数据框的列名查找。
内容的提问来源于stack exchange,提问作者masomenos x
相关产品推荐
相关产品推荐

