2017-01-24 8 views
0

各デルタ値でpower.t.testを実行して必要なサンプル数を計算し、それをrepsベクトルの値に保存して置換するNA。私はforループを作成しようとしましたが、repsが保存されていた場所だけを変更し、毎回同じデルタ値を使用しました。別の関数の中にあっても、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:私は自分の間違いを理解しました。 deltarepsからインデックス番号を呼び出すには、for (i in 1:8)を使用する必要がありました。

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

それはうまくいった!私はかなり新しくrapplyを使用するとは思わなかった。ツールベルトに別の機能を追加してうれしい!ありがとう! – James

関連する問題