2017-01-24 1 views
0

Я хочу запустить power.t.test с каждым значением дельта, чтобы вычислить необходимое количество выборок, а затем сохранить его в значение в векторе reps для замены Анна. Я попытался создать цикл for, но это изменилось бы только при сохранении повторений и использовало бы одно и то же значение дельта каждый раз. Есть ли способ, чтобы цикл for вызывал разные значения delta, даже если он находится внутри другой функции?Как установить диапазон дельта в power.t.test

delta = c(.25,.5,.75,1,1.25,1.5,1.75,2) 
reps = c(NA,NA,NA,NA,NA,NA,NA,NA) 
reps[1] <- power.t.test(n = NULL, 
        delta = delta[1], 
        sd = pop_sd, 
        sig.level = 0.01, 
        power = 0.90, 
        type = 'paired', 
        alternative = 'two.sided' 
        )$n 
ans <- data.frame(delta/pop_sd,reps) 
ans 

Редактировать: Вот мой цикл, который получил меня ближе, чем я думаю.

for (x in delta){ 
    reps[1:8] <- power.t.test(n = NULL, # make sure to fill in ALL of the ? 
         delta = delta[x], 
         sd = pop_sd, 
         sig.level = 0.01, 
         power = 0.90, 
         type = 'paired', 
         alternative = 'two.sided' 
         )$n 
} 

Редактировать 2: Я выяснил свою первоначальную ошибку. Мне нужно было использовать for (i in 1:8) для вызова индексированных чисел от delta и reps.

for (i in 1:8){ 
    reps[i] <- power.t.test(n = NULL, # make sure to fill in ALL of the ? 
         delta = delta[i], 
         sd = pop_sd, 
         sig.level = 0.01, 
         power = 0.90, 
         type = 'paired', 
         alternative = 'two.sided' 
         )$n 
} 
+2

Давайте посмотрим ваш цикл 'for'. Звучит как опечатка, которую, вероятно, легко объяснить и исправить. – Gregor

+0

Я добавил код для выше. Не знаю, как добавить его в комментарий. – James

+0

Добавление его выше намного лучше, чем добавление его в комментарии. – Gregor

ответ

1

Попробуйте это!

tmp_reps = lapply(1:length(delta), function(x){ 
      power.t.test(n = NULL, 
      delta = delta[x], 
      sd = pop_sd, 
      sig.level = 0.01, 
      power = 0.90, 
      type = 'paired', 
      alternative = 'two.sided')$n 
}) 

reps <- unlist(tmp_reps) 
ans <- data.frame(delta/pop_sd, reps) 
+0

Это сработало! Я довольно новичок в этом вопросе и не думал использовать его. Рад добавить еще одну функцию к поясу инструмента! Благодаря! – James

Смежные вопросы