1

PDF を計算する関数を作成する予定で、if/elseif/else ステートメントを使用することが提案されています。しかし、そうしようとすると、エラーメッセージが表示され続けますが、何が間違っているのかわかりませんか?

これは、関数が計算するはずの PDF です:

fx = 0.3 if (0<=x<1)
if (1<=x<2)
if 0.25 if (2<=x<3)
0.15 if (3<= x<4)
(4<=x<5) の場合は 0.2、
それ以外の場合は 0

これは私のコードです:

    fx = function(x)
    { 
    if (0<=x<1) {
    pdf=0.3
    } elseif (1<=x<2) {
    pdf=0.1
    } elseif (2<=x<3) {
    pdf=0.25
    } elseif (3<=x<4) {
    pdf=0.15
    } elseif (4<=x<5) {
    pdf=0.2
    } else 
    pdf=0

    pdf
    }

「}」を確認しましたが、すべて適切に配置されているようです。「pdf」を「fx」に変更しようとしましたが、うまくいきません。どこが間違っていますか?

4

3 に答える 3

3

あなたのコードには2つの問題がありました

1/ a <= x < b などの式は数学では有効ですが、コードでは無効です。コードでは、 <=x && x < b が必要です

2/「elseif」ではなく「else if」を使用する必要があります

このコードは機能します

fx = function(x)
{ 
if (0<=x && x<1) {
pdf=0.3    
} else if (1<=x && x<2) {
pdf=0.1
} else if (2<= x&& x<3) {
pdf=0.25
} else if (3<=x && x<4) {
pdf=0.15
} else if (4<= x&& x<5) {
pdf=0.2
} else 
pdf=0

pdf
}

また、最適化として、繰り返しテストする必要があるのは、a ではなく x < b だけです。また、pdf 変数は必要ありません。これは次のコードにつながりますが、上記に投稿された組み込み関数の方が効率的であると推測しています。

fx = function(x)
{ 
if (x<0) 0
else if (x<1) 0.3
else if (x<2) 0.1
else if (x<3) 0.25
else if (x<4) 0.15
else if (x<5) 0.2
else 0
}
于 2013-04-17T21:35:33.800 に答える
0

ステップ関数を作成するために使用できますstepfun(これがPDFです)

fx <- stepfun(x = 0:5, y = c(0,0.3,0.1,0.25,0.15,0.20,0))

ベクトル化されたバージョンが必要な場合は、使用できますVectorize

vfx <- Vectorize(fx)

stepfunオブジェクトはうまくプロットできます(関連する例については、https:plot //stackoverflow.com/a/16072697/1385941 を参照してください)。

于 2013-04-18T00:53:19.713 に答える