2017-10-08 12 views
0

xの値に応じて2つの関数のいずれかを返す関数を作成しようとしています。次の関数を作成すると、エラーが発生し、理由がわかりません。IFステートメントで予期しない '<='が発生するR

t <- c(0.1,0.9,1.5) 

squeze <- function(x){ 
if(t[1]<x<=t[2]){ 
    exp(a1*x+b1) 
} else { 
    exp(a2*x+b2) 
} 
} 

エラーメッセージ:

Error: unexpected '<=' in: 
"squeze <- function(x){ 
if(t[1]<x<=" 
> exp(a1*x+b1) 
Error: object 'x' not found 
> } else { 
Error: unexpected '}' in " }" 
> exp(a2*x+b2) 
Error: object 'x' not found 
> } 
Error: unexpected '}' in " }" 
> } 
Error: unexpected '}' in "}" 

誰かが私が見逃しているものを指摘することができたならば、私は非常に感謝。

事前に、ありがとうございます!

+3

各不等式はテストであり、TまたはFを返します。2つのテストを組み合わせるには、 '&'または '| 'を使用する必要があります。だから、あなたは 't [1] Gregor

+0

ありがとう@Gregor! –

答えて

2

パーサはそれを気に入らないため、エラーが発生します。

(1 < 3) < 2 # TRUE 

1 < 3TRUEが、その後TRUE1に強制変換されており、1<2はR >TRUE

は次のとおりです。

そして、それはそれはトラブルにあなたを持っている可能性があるため良いことだ、見関数

`>` # function (e1, e2) .Primitive(">")  
`>`(1,2) # FALSE  

このli

between(x, t[1], t[2],F) 

あなたは両方の境界を含める場合:何をしようとしたことは代わりにあなたが両方の境界を除外した場合は、data.table::betweenを使用することができますif(t[1] < x & x <= t[2])

を使用R.

に意味をなさない理由GHTあなたが表示されますあなたはdata.table::betweendplyr::betweenを使用することができます。

between(x, t[1], t[2]) 

data.tableも構文0を許可します

+0

包括的な回答@Moody_mudskipperありがとうございます! グレゴールと同じように書きましたが、この答えはもう少し詳しく説明されています。 –

関連する問題