Прерывание циклов с условным условием, которое смотрит на прошлые результаты, сгенерированные l oop? Установка условия на более раннее значение в векторе - PullRequest
1 голос
/ 27 марта 2020

Я пытаюсь нарушить все oop, имея условие, которое проверяет, удовлетворяет ли последнее значение каждого из трех векторов определенному условию, которое могло иметь место на этой итерации ИЛИ прошлых итераций l oop.

Ниже приведена очень простая версия того, что я пытаюсь сделать.

Рассмотрим следующее l oop:

period = c(1:100)

x1 = 6
x2 = 8
x3 = 10
x = c()

for(t in 1:length(period)){x[t] = sample(c(x1,x2,x3), size = 1, replace = TRUE, prob = c(0.6,0.35,0.05))}

Мне просто интересно, как я могу сделать так, чтобы этот l oop останавливался, как только каждое значение было взято хотя бы один раз. То есть l oop останавливается, когда каждый из x1,x2,x3 был выбран.

Спасибо

1 Ответ

1 голос
/ 27 марта 2020

Вы можете использовать while l oop и продолжать его до тех пор, пока all 3 значения не появятся в x.

x1 <- 6
x2 <- 8
x3 <- 10
i <- 1
x = c()
flag <- TRUE

while(flag){
  x[i] <- sample(c(x1,x2,x3), size = 1, prob = c(0.6,0.35,0.05))
  i <- i + 1
  if (all(c(x1, x2, x3) %in% x)) flag <- FALSE
}

x
#[1]  6  6  6  6  6  8  6  6  8  8  8  6  6  8  8  8  6  6  6  8 10

Вариант без использования flag:

while(TRUE){
  x[i] <- sample(c(x1,x2,x3), size = 1, prob = c(0.6,0.35,0.05))
  i <- i + 1
  if (all(c(x1, x2, x3) %in% x)) break
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...