【发布时间】:2016-05-16 15:49:30
【问题描述】:
我正在尝试生成 n 个总和小于 1 的随机数。
所以我不能只运行runif(3)。但是我可以将每次迭代的条件设置为到该点生成的所有值的总和。
这个想法是开始一个空向量v,并设置一个循环,以便对于每次迭代i,生成一个runif(),但在它被接受为v的元素之前,即v[i] <- runif(),测试sum(v) < 1,而FALSE最后一个条目v[i]最终被接受,但是如果TRUE,即总和大于1,v[i]被扔出向量,重复迭代i。
我远未实现这个想法,但我想按照类似于以下内容的方式解决它。这与其说是一个实际问题,不如说是一个练习,以了解一般循环的语法:
n <- 4
v <- 0
for (i in 1:n){
rdom <- runif(1)
if((sum(v) + rdom) < 1) v[i] <- rdom
}
# keep trying before moving on to iteration i + 1???? i <- stays i?????
}
我研究了while(实际上我在标题中加入了while 函数);但是,我需要向量具有n 元素,所以如果我尝试一些基本上告诉R 添加随机统一实现作为向量v while sum(v) < 1 的元素的方法,我会卡住,因为我可以结束v 中的元素少于 n。
【问题讨论】:
-
要循环while条件为真,使用
while.... -
你想用什么作为限制?尝试次数,
sum(v),v的长度? -
我想得到一个向量
v,这样它的元素之和sum(v)不超过1,但我需要向量有n 个元素。 -
所以我不能用
while (sum(v))小于 1 来做点什么,继续添加元素,但是当它超过 1 时,break,因为我最终可能会小于 @ 987654349@ 向量中的元素。
标签: r loops while-loop