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

如何在R语言中生成随机数组直至总和达到指定值?

解决方案:生成指定总和的随机数组

需求回顾

需要创建一个长度为years的数组,逐个为元素赋值0到max.size之间的随机整数,直到数组元素总和等于tot,剩余未赋值的元素保持为0。

可行实现代码(For循环版本)

years <- 20 # 数组总长度
tot <- 10 # 目标总和
max.size <- 3 # 单个元素允许的最大值

# 初始化全0数组
N <- numeric(years)
current_sum <- 0

for (i in 1:years) {
  # 计算当前元素可赋值的上限:不能超过max.size,也不能超过剩余需要凑齐的总和
  available_max <- min(max.size, tot - current_sum)
  
  # 剩余需要的总和为0时,直接赋值0并退出循环
  if (available_max == 0) {
    break
  }
  
  # 从0到available_max中随机选取一个值
  current_val <- sample(0:available_max, 1)
  N[i] <- current_val
  
  # 更新当前总和
  current_sum <- current_sum + current_val
  
  # 达到目标总和后,退出循环,剩余元素保持0
  if (current_sum == tot) {
    break
  }
}

# 查看结果
N

另一种实现(While循环版本)

如果你更倾向于用while语句,逻辑和上面一致:

years <- 20
tot <- 10
max.size <- 3

N <- numeric(years)
current_sum <- 0
current_index <- 1

while (current_sum < tot && current_index <= years) {
  available_max <- min(max.size, tot - current_sum)
  current_val <- sample(0:available_max, 1)
  
  N[current_index] <- current_val
  current_sum <- current_sum + current_val
  current_index <- current_index + 1
}

N

原代码的问题分析

你之前写的函数存在几个核心问题:

  • x <- i直接把传入的数组覆盖成了单个随机值,完全丢失了原数组的长度和结构
  • 没有遍历数组的每个元素,只是重复生成单个值直到它等于tot,这和"逐个赋值数组元素直到总和达标"的需求不符
  • 没有考虑剩余总和的限制,无法避免赋值后总和超过tot的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:02:34