- 此问题在此处已有答案**:
Generate N random integers that sum to M in R(3个答案)
8小时前关门了。
我想创建一个数组,然后为每个位置赋值,直到数组中的值之和等于给定的总和,一旦达到最大值,数组的其余部分可以为0,所以开始时:
years <- 20 # total length of array
N <- array(0, years) # make array
tot <- 10 # Total I want to stop at
max.size <- 3 # maximum value to put in the array
因此,结果可能类似于:N = c(1,3,0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0)
我认为while语句会起作用,类似于this question,但不确定如何到达那里。而且,我认为this question有我需要的部分,但我很难将它们放入我的上下文中。
random.sample <- function(x) { repeat {
# do something
i <- sample(0:max.size, 1)
x <- i
# exit if the condition is met
if (sum(x) == tot) break } return(x) }
random.sample(N)
谢谢你的时间。
1条答案
按热度按时间roejwanj1#
一个使用
cumsum
和ifelse
的简单函数就可以完成这项工作,而不需要代价高昂的循环。测试