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

R语言循环向dataframe赋值仅保留最后一次迭代结果的修复咨询

问题成因
  • 初始代码全列覆盖问题:你最初使用df[,列号]的赋值语法时未指定行索引,会直接覆盖目标列的所有行数据,每一次迭代都会清空上一次的赋值结果,最终仅保留最后一次迭代的数值。同理初始代码的while循环中df[,2] = rowd1也是整列覆盖逻辑,最后只能拿到最后一次循环的kol值对应的结果。
  • 调整后多列覆盖问题:调整后的代码中你使用df[1,2:224] = output2语法,每次迭代都会把第1行的第2到224列全部赋值为当前x2对应的Gen值,相当于每循环一次就把这223列的内容全部覆盖一次,最后自然只剩下最后一次循环x2=223的结果。
修复方案

基础修复(保留原循环逻辑)

首先调整dataframe初始化的列数(你原来仅设置了12列,无法容纳224列的数据),再修改赋值时的索引逻辑,给每一列单独赋值:

# 初始化350行224列的空dataframe
df = data.frame(matrix(nrow = 350, ncol = 224))
# 第1列赋值:每行对应1-350的数值
for (x in 1:350) {
  output  <-  paste0(x)
  df[x,1] = output
}
# 第2-224列的第1行赋值:对应Gen 1到Gen 223
for (x2 in 1:223) {
  output2  <-  paste("Gen ",x2)
  # x2从1到223对应列号2到224,列索引取x2+1即可
  df[1, x2 + 1] = output2
}
# 如果需要给第2-224列的所有行都赋值为对应Gen值,把上一行的行索引1去掉即可:
# df[, x2 + 1] = output2

# 自定义列名,可根据实际列数调整
colnames(df)[1] <- "Kromosom"
colnames(df)[2:12] <- c("A","B","C","D","E","F","G","H","I","J","K")
# 剩余列的列名可按需补充

优化方案(向量化赋值,无需循环)

R本身支持向量化操作,无需循环即可实现同等需求,运行效率更高:

df = data.frame(matrix(nrow = 350, ncol = 224))
# 第1列直接向量化赋值
df[,1] = as.character(1:350)
# 第2-224列的第1行赋值
df[1, 2:224] = paste0("Gen ", 1:223)
# 如果要给第2-224列整列赋值,使用rep函数批量处理即可
# df[, 2:224] = rep(paste0("Gen ", 1:223), each = 350)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:45:02