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

生成满足双条件的随机表格:首次迭代后type向量为空问题求助

问题分析与解决方案

原代码的核心问题是循环逻辑完全混乱,导致type向量被无意义地反复删除元素直到为空:

  • 嵌套的for和while循环一直在修改同一行的type和qty,每次修改都会从type里删掉选中的元素,相当于把270个type挨个试一遍,直到type被掏空。
  • 累计总和的判断逻辑错误,只检查当前行的qty是否≤total,而不是所有行的总和。
  • 初始化时给第一行赋值的1也不符合需求,会干扰累计总和的计算。

修正后的代码

下面的代码会生成符合要求的随机表格:

total <- 20
qty_options <- c(2, 3, 4, 5)
available_types <- 1:270

# 初始化空数据框
gen_table <- data.frame(type = integer(), qty = integer())
current_sum <- 0

# 循环生成行,直到无法再添加符合条件的行
while (current_sum + min(qty_options) <= total && length(available_types) > 0) {
  # 随机选一个未使用的type
  selected_type <- sample(available_types, 1)
  # 随机选qty
  selected_qty <- sample(qty_options, 1)
  
  # 检查添加后总和是否不超过total
  if (current_sum + selected_qty <= total) {
    # 添加到表格
    gen_table <- rbind(gen_table, data.frame(type = selected_type, qty = selected_qty))
    # 更新累计总和
    current_sum <- current_sum + selected_qty
    # 从可用type中移除已选的
    available_types <- available_types[available_types != selected_type]
  }
}

# 查看结果
gen_table

代码说明

  • 循环条件确保:剩余可用type不为空,且即使选最小的qty也不会超过total,避免无效循环。
  • 每次只生成一行新数据,确保type唯一(选完就从可用列表移除)。
  • 只有当选中的qty加上当前总和不超过total时,才会添加这一行,严格满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:40:44