Я пытаюсь написать функцию, которая генерирует смоделированные данные, но если смоделированные данные не удовлетворяют условию, мне нужно пропустить их, и если они удовлетворяют условию, я применю сводку функции.
Я хотел бы зациклить его, пока не найду 10 действительных наборов данных, а затем остановлюсь. (Я действительно должен сделать это, пока он не достигнет 10000). Вот код Код вроде работает, но не останавливается. Я думаю, что я, вероятно, поместил функцию next и break в неправильном месте. Я надеюсь, что кто-то может помочь мне написать это вместе.
Другой способ, которым я мог бы подойти к этому, - сначала сгенерировать все действительные данные, а затем применить функцию find_MLE (summary) к окончательному списку.
Редактировать: я положил перерыв внутри повтора. Я редактирую код, чтобы сделать его воспроизводимым. Тем не менее код продолжает генерировать данные и не ломается.
вот воспроизводимая версия
validData <- function(GM, GSD,sampleSize, p) {
count=0
for (i in 1:n) {
repeat {
lod <- quantile(rlnorm(1000000, log(GM), log(GSD)), p = p)
X_before <- rlnorm(sampleSize, log(GM), log(GSD))
Xs <- ifelse(X_before <= lod, lod, X_before)
delta <- ifelse(X_before <= lod, 1, 0)
pct_cens <- sum(delta)/length(delta)
print(pct_cens)
if (pct_cens == 0 & pct_cens ==1) next
else {
sumStats <- summary(Xs)
Med <- sumStats[3]
Ave <- sumStats[4]
}
count<- count+1
if (count == 10) break
}}
return(c(pct_cens, Med, Ave))
}
validData(GM=1,GSD=2,sampleSize=10,p=0.1)