いくつかの方法があります。以下は、「ifelse」ステートメント以外のロジックを使用して、「f(x,y)」が質問にリストされている基準を満たすように、関数「f」を構築するいくつかの例です。
注: 「x=70」はロジックを壊すため、元の投稿に 1 つの修正も追加します。2 番目の基準に 'x>=70' を追加しています。
オプション 1 : 標準の「if / else if / else」ロジック ブロックを使用します。個人的には、このオプションは読みやすいので気に入っています。
f <- function(x, y){
if (y>= 50){
return(0.2*x+0.8*y)
} else if (y < 50 & x >= 70){
return(y+10)
} else {
return(y)
}
}
オプション 2 : 2 つの論理テスト (実際には 2 つしかありません) を 1 つの文字列に結合し、スイッチを使用します。最後の名前のないオプションは「else」として扱われることに注意してください。
f <- function(x, y){
return(
switch(paste(x >= 70, y >= 50, sep=""),
TRUEFALSE = y + 10,
FALSEFALSE = y,
0.2*x+0.8*y
)
)
}
オプション 3 : 'if' ステートメントを並べ替えて、論理比較を減らします。これは、データ セットが大きい場合やメモリが非常に限られている場合に行うことです。ブロック全体を読んで完全に理解する必要があるため、トラブルシューティングが少し難しくなります。メモリまたはサイクルの制限がない場合は、オプション 1 の方が適しています。
f <- function(x, y){
if (y >= 50){
return(0.2*x+0.8*y)
} else {
if (x >=70){
return(y+10)
} else {
return(y)
}
}
}
他にもオプションはありますが、これらはすぐに頭に浮かぶ最も単純なものです。