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

