采样直到列表满足条件

时间:2016-02-01 05:48:43

标签: r

我希望采用以下向量:

v1 = c(2, 5, 7, 9, 1)

我想运行一个迭代采样循环,将采样值放入 一个新的向量v2,然后在这些值的总和大于12时中断此过程。

这是我到目前为止所做的:

v2 = c()
while (sum(v2) > 12) {
  sample(v1, 1, replace = FALSE)
  if(sum(v2) > 12))
  break
}

不确定我是否在正确的轨道上。感谢帮助。

1 个答案:

答案 0 :(得分:2)

我认为你的语法存在问题,使用break会使用repeat循环更有意义:

v1 = c(2, 5, 7, 9, 1); v2 <- c(); repeat {
    v2 <- c(v2, sample(v1[!v1 %in% v2], 1) )
    if( sum(v2) > 12 )
    break
    }; print(v2)

[1] 5 7 9