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

R语言如何将kknn模型双层循环的运行结果存入数据框

问题原因

你初始化的result数据框总行数仅为1000行,和单个k值对应的i迭代次数一致。每次外层k循环(f从25到100)执行时,内层i循环都会从第1行开始覆写已有数据,最终只有最后一次k=100的循环结果被保留。

修复方案

优先选择预分配存储空间的写法,运行效率更高:

# 先计算总数据量:4个k值 * 数据集行数
total_row <- 4 * nrow(credit_card_data)
result <- data.frame(matrix(nrow = total_row, ncol = 3))
colnames(result) <- c("k", "i", "fit")
# 定义行索引计数器
row_idx <- 1

for (f in seq(25, 100, 25))
{
  for (i in 1:nrow(credit_card_data))
  {
    model_knn <- kknn(V11~., credit_card_data[-i,], credit_card_data[i,], k = f, scale = TRUE)
    fit <- fitted.values(model_knn)
    # 按当前索引写入数据
    result[row_idx, 1] <- f
    result[row_idx, 2] <- i
    result[row_idx, 3] <- fit
    # 索引自增
    row_idx <- row_idx + 1
  }
}
result

如果数据集规模较小,也可以用更简单的动态追加写法:

# 初始化空数据框
result <- data.frame(k = integer(), i = integer(), fit = numeric())

for (f in seq(25, 100, 25))
{
  for (i in 1:nrow(credit_card_data))
  {
    model_knn <- kknn(V11~., credit_card_data[-i,], credit_card_data[i,], k = f, scale = TRUE)
    fit <- fitted.values(model_knn)
    # 追加当前迭代结果
    result <- rbind(result, data.frame(k = f, i = i, fit = fit))
  }
}
result

内容的提问来源于stack exchange,提问作者Joshamu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:12:03