2017-06-09 17 views
1

私は2つのカーブをRでループしようとしていますが、カーブの1つのみが表示されています。さらに重要なことは、私は(x、y軸用)axis()コマンドを2回呼び出すが、私は次のエラーを取得:私のカーブのforループがRの `Inf`を返すのはなぜですか?

Error in axis(1, at = success/trials) : no locations are finite

'to' must be a finite number

質問

私は思ったんだけどを(A)なぜ私の最初のカーブだけが表示されています(b)私は私のaxis()の呼び出しで得るのですか?ここで

は私のRコードです:あなたはsuccess[2]successを設定するループを通る

success = c(10, 50) ; trials = 100 

for(i in 1:length(success)){ 

success = success[i] 
    col = (1:length(success))[i] 

c = curve(dbinom(success, trials, x), 0, 1, add = ifelse(i > 1, T, F), ty = "l", xlim = c(0, 1), 
      col = col, yaxt = "n") 

text(success/trials, max(c$y), bquote(bolditalic(H[.(i)])), pos = 3, xpd = T) 

axis(1, at = success/trials) 

} 

axis(2, at = seq(0, max(c$y), len = 7), labels = round(seq(0, max(c$y), len = 7), 2), las = 1) 

答えて

1

あなたはsuccess[1]successを設定するループを通して、あなたの最初のパスで及び第二パスではなく、その時点でsuccessました長さ1のため、NAになります。

同様に、colが同じ理由でNAになるため、2番目のプロットは表示されません。

これを修正するには、成功のリストとループ内の変数に別の名前を使用します。たとえば、ループ内にsuccesscolを設定する場合は、successes = c(10,50)を使用してからsuccessesを使用します。 (またcolのために、ちょうどcol = iを設定します。)

あなたのコードにそれを適用する:

successes = c(10, 50) ; trials = 100 
for(i in 1:length(successes)){ 
    success = successes[i] 
    col = i 
    c = curve(dbinom(success, trials, x), 0, 1, add = ifelse(i > 1, T, F), ty = "l", xlim = c(0, 1), 
       col = col, yaxt = "n") 
    text(success/trials, max(c$y), bquote(bolditalic(H[.(i)])), pos = 3, xpd = T) 
    axis(1, at = success/trials) 
} 
axis(2, at = seq(0, max(c$y), len = 7), labels = round(seq(0, max(c$y), len = 7), 2), las = 1) 
+0

フォローアップの質問を。 'i'ラウンドで最大の' max(c $ y) 'を見つける方法は?たとえば、あなたの答えで、 '成功'が** 10 **のときの 'max(c $ y)'が '成功'が** 50 **のときよりも大きいとき、どのラウンドでループ、 'max(c $ y)'はより大きいですか? – rnorouzian

関連する問題