2016-09-22 90 views
-2

我想随机从8个元素中选择一个数字,总和为35.如果数字为0,则查找另一个数字。如果数字大于0,则使此数字为-1。在循环中做这件事,直到向量的总和为20为止。我如何在R中做到这一点? 例如:vec<-c(2,3,6,0,8,5,6,5)R-随机挑选一个数字,一遍又一遍地执行,直到条件成立为止

选择从这个列表中的号码随机,使数-1直到要素的总和变为20

+0

https://www.datacamp.com/community/tutorials/tutorial-on-loops-in-r#gs.KtblU9M - 阅读。 –

+0

为什么这个过程会收敛到20?人们显然可以得到小于或等于20的任何东西,但我认为在这种操作之后获得*精确* 20的总和是纯粹的运气。例如, – RHertel

+0

实现向量20的总和就是条件。 –

回答

0

我真的不知道这是你想要的,但对于我了解你的问题,这里是我的解决方案。您将在我的脚本中获得大部分概念和关键功能。使用它并帮助()来理解它们并对其进行优化。

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 
} 
0

试试这个:

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 
+0

随着函数set.seed将随机做19次?! –

+0

我们只是设置随机数发生器的种子。请参阅'?set.seed'。 – nicola

相关问题