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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 22:15:07