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
相关产品推荐
相关产品推荐

