如何循环执行聚类与逻辑回归代码10次并保留所有迭代结果
解决方法
先初始化一个空数据框用于存储所有迭代结果,再将原有聚类、OR计算逻辑包裹在10次循环中,每次迭代后为结果添加迭代编号并追加到总数据框里。修改后的完整代码如下:
# 初始化空数据框,用于累计所有迭代的结果 all_individual_ors <- data.frame() # 循环执行10次 for (iter in 1:10) { # K-means聚类步骤 cluster_algo <- kmeans(covariate_matrix, centers = 3) cluster_label_assignments <- as.data.frame(cluster_algo$cluster) colnames(cluster_label_assignments) <- "cluster_label_assignments" cluster_label_assignments$id <- covariate_matrix$id cluster_labels <- unique(cluster_label_assignments[["cluster_label_assignments"]]) # 计算每个聚类的OR值 cluster_odds_ratios <- vector("numeric", length(cluster_labels)) for (c in seq_along(cluster_labels)) { within_label_individuals <- cluster_label_assignments %>% filter(cluster_label_assignments == cluster_labels[c]) or_calc_df <- covariate_matrix %>% filter(id %in% within_label_individuals[["id"]]) cluster_fit <- glm(Disease ~ Exposure, data = or_calc_df, family = "binomial") cluster_or <- exp(coef(cluster_fit)) cluster_odds_ratios[[c]] <- round(cluster_or[2], 4) } # 将OR值与聚类标签关联 cluster_odds_ratios_df <- data.frame( cluster_label_assignments = cluster_labels, or = cluster_odds_ratios ) # 关联个体与对应聚类的OR值(修正原代码merge参数错误) individual_ors <- merge( cluster_label_assignments, cluster_odds_ratios_df, by = "cluster_label_assignments", how = "inner" ) # 添加迭代编号,区分不同次的计算结果 individual_ors$iteration <- iter # 将当前迭代结果追加到总数据框 all_individual_ors <- rbind(all_individual_ors, individual_ors) } # 查看最终汇总结果 head(all_individual_ors)
关键修改说明
- 初始化总存储容器:提前创建
all_individual_ors空数据框,避免每次迭代覆盖之前的结果。 - 循环包裹核心逻辑:把聚类、OR计算、个体关联的代码放入10次循环中,重复执行目标流程。
- 添加迭代标识:为每次迭代的结果增加
iteration列,方便后续区分不同轮次的聚类分组和OR值。 - 修正merge参数:原代码中
merge使用的on参数是错误的,R语言中正确参数为by,否则会触发报错。 - 追加结果到总数据框:用
rbind将单次迭代的结果合并到总数据框,实现所有迭代数据的留存。
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

