【发布时间】:2017-05-31 23:13:07
【问题描述】:
这个问题是this entry 的变体,但更复杂的是,条件不必只满足一次,而是在循环的每一步都满足。
上下文:我正在尝试对向量进行采样:
balls = c(R = rep(1,2), G = rep(2,2), B = rep(3,2), W = rep(4,3), Y = 5, b = 6, O = 7)
以这样的方式,没有颜色(“R”,“G”,“B”,“W”,“Y”,“B”,“O”)具有重复或三倍数量的球(例如“R " 或 "W") 最终连续对齐(没有两个相同颜色的球并排)。这是为了验证this post in MathSE。
所以这是我要实现的伪代码:
sam[1] = sample(balls, 1)
for (i in 2:length(balls)){
remaining = balls[- which(balls = sam[i])]
ifelse(x <- sample(remaining) != sam[i], sam[i + 1] = x, IFELSE ALL OVER AGAIN)
}
【问题讨论】:
-
我不确定我是否完全理解您的
ifelse电话,但听起来您可能会很好地使用while循环。 `while(condition){ 重复直到条件不满足,然后回到for循环} -
在您的
remaining =...行中,您是否打算仅对与sam[i]不同的球进行子集化?这似乎是有道理的,但你需要==而不是=。在这种情况下,您的ifelse语句(或while循环)将是多余的,因为 所有 被采样的值都应该符合条件。 -
@rosscova 抱歉,我的回复延迟。第一条评论是目标。
remaining背后的想法是在下一轮从选择池中消除已经分配给sam的球。
标签: r loops if-statement