0

次のステートメントを同じことを実行するが、ifelseを使用しないステートメントに変換する方法を誰かにアドバイスできますか?

<-ifelse(y>=50, 0.2*x+0.8*y, ifelse(y<50 & x>70, y+10, ifelse(y<50 & x<70, y))) 

x=80
y=60

したがって、最終的なコードは64の答えを与える必要があります-最初の条件を選択します。次に、それをテストして、他の3つの条件がxとyの値を変化させても正しい結果をもたらすことを確認します。

どうもありがとう。

4

4 に答える 4

4

これは機能するはずです:

finalmark <- (x * 0.2 + y * 0.8) * (y >= 50) + (y + 10 * (x > 70)) * (y < 50)
于 2013-02-06T13:22:37.937 に答える
1

yが数値の場合、y> = 50でテストしたら、yは50未満である必要があるため、テストを続けないでください。同様に、x> 70を見つけたら、最後のは必要ありませんifelse。x = 70のリターンはありません。私の推測では、そこで<=または>=の状況をテストしたいと思います。

ifelse(y>=50, 0.2*x+0.8*y, ifelse(x>70, y+10, y)) 

スカラーでそれは

if(y >= 50){
  0.2*x+0.8*y
}else if(x > 70){
  y+10
}else y

あなたが一般的にロジックを書くのに苦労しているように思われるので、私はあなたがより完全な質問を投稿することを提案します。ここで、本当にやりたくないことをしている可能性があります(おそらく)。

于 2013-02-06T13:17:37.043 に答える
1

このようなもの?

if(y>=50){
    0.2*x+0.8*y 
     }else{
      if(y<50 & x>70){
         y+10 
          }else{ 
            if(y<50 & x<70){
               y 
              }else{
               "OMG I did not expect this scenario"
            }
        }
    }

試してみてください: y=45; x=70最後の条件がある理由を確認してください。

于 2013-02-06T13:01:39.440 に答える
0

いくつかの方法があります。以下は、「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)
        }
    }
}

他にもオプションはありますが、これらはすぐに頭に浮かぶ最も単純なものです。

于 2013-02-06T13:20:14.430 に答える