2017-01-24 55 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