2017-01-24 54 views
0

我想運行每個delta值的power.t.test來計算必要的採樣數,然後將其保存到reps向量中的值以替換一個NA。我試圖做一個for循環,但它只會改變reps被保存的地方,並且每次都使用相同的delta值。有沒有辦法讓for循環調用不同的delta值,即使它在另一個函數內部?如何在power.t.test中設置delta範圍

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循環,這讓我想得最接近。

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)撥打deltareps的索引號碼。

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

工作正常!我對r很新,也沒有想過用lapply。很高興爲工具帶添加另一項功能!謝謝! – James