2016-10-27 10 views
1

私は現在、クラスのいくつかのRコードを書いています。私のベクトルに値を返すTryCatch

library(pwr) 
delta <- c(2.5, 5, 7.5,10) 
v <- c(4,6,9,13) 
size <- vector() 


for (i in (v)){ 
    for (j in (delta)){ 
    tryCatch({ 
fRough <- sqrt(((1/i)*(j)^2)/(2*ucb2)) 
samplesize <- pwr.anova.test(k =i, f = fRough, sig.level = 0.05, power = 0.9) 
size <- c(size, (trunc((samplesize[["n"]]),0)+1)*i) 
    }, error = function(e)(size <- c(size, i*2))) 
    } 
} 

ucb2はほんの一部の浮動小数点値です。私はこのループを実行したいが、deltaが7.5と10のときにエラーを返す。エラーが発生したときにコードが(i * 2)の値を出力したい。私はエラー機能を使用してみましたが、動作していないようです。また、誰かが私が関数(e)、関数(cond)などについて知ることができる資料を提案することができます。私はその答えを見つけることができません。

ご協力いただきありがとうございます。

+0

ハドレーのAdvancedの[この章](http://adv-r.had.co.nz/Exceptions-Debugging.html)を試してみてくださいRを使用して例外処理を開始します。 – twalbaum

答えて

0

問題は、エラー機能内でsizeの更新を実行しようとしていることです。誤差関数の戻り値にsizeを更新すると、トリックを行います:

for (i in (v)){ 
    for (j in (delta)){ 
    size <- tryCatch({ 
     fRough <- sqrt(((1/i)*(j)^2)/(2*ucb2)) 
     samplesize <- pwr.anova.test(k =i, f = fRough, sig.level = 0.05, power = 0.9) 
     c(size, (trunc((samplesize[["n"]]),0)+1)*i) 
    },error = function(e) c(size, i*2)) 
    } 
} 
+0

それは魅力的に機能しました!ありがとうございます – Saxman

+0

@Saxman素晴らしい。この答えを正しいとマークしますか? – twalbaum

関連する問題