2014-12-12 3 views
0

Я пытаюсь создать R-код, который помещает другой цикл внутри того, который я уже создал. Вот мой код:Петля внутри цикла в R

t <- rep(1,1000) 
omega <- seq(from=1,to=12,by=1) 
for(i in 1:1000){ 
    omega <- setdiff(omega,sample(1:12,1)) 
    t[i] <- length(omega) 
    remove <- 0 
    f <- length(t [! t %in% remove]) + 1 
} 

Когда я запускаю этот код, я получаю число а испытания она принимает п, чтобы достичь нулевого вектора, но я хочу сделать 10000 итераций этого эксперимента.

ответ

1

replicate, вероятно, как вы хотите запустить внешний цикл. Также нет необходимости в назначении f внутри цикла. Здесь я переместил его снаружи и превращал его просто подсчитывает элементы t, которые больше, чем 0, плюс 1.

result <- replicate(10000, { 
    t <- rep(1, 1000) 
    omega <- 1:12 
    for(i in seq_along(t)) { 
    omega <- setdiff(omega,sample(1:12,1)) 
    t[i] <- length(omega) 
    } 
    sum(t > 0) + 1 
}) 

Я подозреваю, что ваш код может быть упрощен другими способами, а также, что вы можете просто записать распределение, которое вы ищете без симуляции. Я считаю, что ваша переменная интереса - это то, как долго вы получите хотя бы один из чисел 1:12, да?

+0

это именно то, что я искал спасибо! Я в основном пытаюсь выяснить, сколько проб требует, чтобы моя омега-последовательность была уменьшена до числового (0) (переменная f), а затем повторила процедуру несколько раз, чтобы получить представление о распределении f. –

1

Вы просто хотите запустить существующий цикл 10000 раз, как показано ниже?

t <- rep(1,1000) 
omega <- seq(from=1,to=12,by=1) 
f <- rep(NA, 10000) 
for(j in 1:10000) { 
    for(i in 1:1000){ 
     omega <- setdiff(omega,sample(1:12,1)) 
     t[i] <- length(omega) 
     remove <- 0 
     f[j] <- length(t [! t %in% remove]) + 1 
    } 
} 
Смежные вопросы