R中如何将不同PC数LDA重分类率的循环结果合并为单个数据框
R代码修改方案:合并LDA重分类率循环结果为单个数据框
你可以通过预存结果的方式替代逐次打印,以下是两种可直接使用的修改方案:
方案1:循环内逐次追加结果(直观易理解)
先初始化空数据框,每次循环计算完成后将当前结果追加到数据框中:
# 初始化空结果表 lda_res <- data.frame(pc_count = integer(), acc = numeric()) for (j in 1:21){ current_lda <- lda( x = data.frame(trainingframe[-1])[1:j], grouping = trainingframe$locus, CV = TRUE, prior = c(1,1,1)/3 ) # 计算重分类准确率 current_acc <- sum(diag(prop.table(table(trainingframe$locus, current_lda$class)))) # 追加当前结果 lda_res <- rbind(lda_res, data.frame(pc_count = j, acc = current_acc)) }
运行完成后lda_res就是包含21组PC数量和对应重分类率的完整数据框,可直接用于RMarkdown表格输出。
方案2:预分配向量存储结果(运行效率更高)
如果后续需要扩展循环次数,预分配内存的方式性能更优:
# 预分配存储向量 pc_count <- 1:21 acc <- numeric(length(pc_count)) for (j in pc_count){ current_lda <- lda( x = data.frame(trainingframe[-1])[1:j], grouping = trainingframe$locus, CV = TRUE, prior = c(1,1,1)/3 ) acc[j] <- sum(diag(prop.table(table(trainingframe$locus, current_lda$class)))) } # 合并为最终数据框 lda_res <- data.frame(pc_count, acc)
附加快捷操作
你可以直接通过以下代码提取符合要求的最优PC数(最高重分类率对应的最小PC数):
optimal_pc <- lda_res[which.max(lda_res$acc), "pc_count"]
在RMarkdown中输出结果表格可直接调用:
knitr::kable(lda_res, col.names = c("PC数量", "重分类准确率"))
内容的提问来源于stack exchange,提问作者user2352714
相关产品推荐
相关产品推荐

