我想随机从8个元素中选择一个数字,总和为35.如果数字为0,则查找另一个数字。如果数字大于0,则使此数字为-1。在循环中做这件事,直到向量的总和为20为止。我如何在R中做到这一点? 例如:vec<-c(2,3,6,0,8,5,6,5)
R-随机挑选一个数字,一遍又一遍地执行,直到条件成立为止
选择从这个列表中的号码随机,使数-1直到要素的总和变为20
我想随机从8个元素中选择一个数字,总和为35.如果数字为0,则查找另一个数字。如果数字大于0,则使此数字为-1。在循环中做这件事,直到向量的总和为20为止。我如何在R中做到这一点? 例如:vec<-c(2,3,6,0,8,5,6,5)
R-随机挑选一个数字,一遍又一遍地执行,直到条件成立为止
选择从这个列表中的号码随机,使数-1直到要素的总和变为20
我真的不知道这是你想要的,但对于我了解你的问题,这里是我的解决方案。您将在我的脚本中获得大部分概念和关键功能。使用它并帮助()来理解它们并对其进行优化。
vec <- c(2, 3, 6, 0, 8, 5, 6, 5)
summ <- 0
new.vec <- NULL
iter <- 1
while(summ<20) {
selected <- sample(vec,1)
if(selected!=0) new.vec[iter] <- selected-1
summ <- sum(new.vec)
iter <- iter+1
}
试试这个:
vec <- c(2, 3, 6, 0, 8, 5, 6, 5)
#just setting the seed for reproducibility
set.seed(19)
tabulate(sample(rep(seq_along(vec),vec),20))
#[1] 0 2 4 0 4 5 3 2
随着函数set.seed将随机做19次?! –
我们只是设置随机数发生器的种子。请参阅'?set.seed'。 – nicola
https://www.datacamp.com/community/tutorials/tutorial-on-loops-in-r#gs.KtblU9M - 阅读。 –
为什么这个过程会收敛到20?人们显然可以得到小于或等于20的任何东西,但我认为在这种操作之后获得*精确* 20的总和是纯粹的运气。例如, – RHertel
实现向量20的总和就是条件。 –