5

R で、同じコード ブロックが 2 つの異なるケースで実行されるように switch ステートメントを作成する方法はありますか? 明らかに、両方のステートメントのコード全体をコピーして貼り付けることができましたが、それを行うためのより適切な方法があることを望んでいました.

コードの大きなブロックの繰り返しを避けるために if-else ブロックを使用することもできますが、スイッチは一般的に R の方が高速です。

R が switch ステートメントを関数として解析する方法が原因である可能性は低いと思われますが、R の開発者が switch ステートメントの解析に特別な注意を払って、複数の引数が同じコード ブロックを参照できるようにしたことを願っています。

4

1 に答える 1

7

値のない名前付き引数を指定すると、それらは値を持つ次の式にフォールスルーします

> switch("A", A=, B=, C="A OR B OR C", "Other")
[1] "A OR B OR C"
> switch("C", A=, B=, C="A OR B OR C", "Other")
[1] "A OR B OR C"
> switch("D", A=, B=, C="A OR B OR C", "Other")
[1] "Other"

これはヘルプページに記載されています?switch

 If 'EXPR' evaluates to a character string then that string is
 matched (exactly)to the names of the elements in '...'.  If there
 is a match then that element is evaluated unless it is missing, in
 which case the next non-missing element is evaluated, so for
 example 'switch("cc", a = 1, cc =, cd =, d = 2)' evaluates to '2'.
于 2013-06-14T17:05:25.103 に答える