6

私は9つの異なる可能性を見て、それに応じて次の形式を持つアクションを選択する関数を持っています:

私がやっていることは、ベクトルを検索し、ベクトルの各エントリについて決定することです

IF the value in the vector is 1 THEN start function B
IF the value in the vector is 2 THEN start function C
IF the value in the vector is 3 THEN start function D
IF the value in the vector is 4 THEN start function E

これをRで書きたいのですが、すべてのケースに「else」を付けるだけですか?

私は次の方法で試しswitchました:

condition<-6
FUN<-function(condition){
    switch(condition,
    1 = random1(net)
    2 = random2(net)
    3 = random3(net)
    4 = random4(net)
    5 = random5(net)
    6 = random6(net)
    7 = random7(net)
    8 = random8(net)
    9 = random9(net)
    10= random10(net))
}

ランダムな 1 ~ 10 は、変数「net」を使用する関数です。

switchコマンドが実行しようとしているのは、「条件」の値をチェックすることであり、上記の例のように 6 の場合、関数を実行します。random6(net)

4

3 に答える 3

6

どちらの回答も適切なツールを示していますが、これは私見です。これまでのところ、OP と両方のソリューションnetは、ベスト プラクティスではないグローバル変数 () を使用する関数を作成しています。

randomX引数が 1 つの関数であると仮定すると、次のようになりますnet

random1 <- function(net){ [...] }
random2 <- function(net){ [...] }
[etc.]

次に、次のことを行う必要があります。

FUN <- switch(condition,
              '1' = random1,
              '2' = random2,
              [etc.])

またはそれ以上:

FUN.list <- list(random1, random2, [etc.])
FUN <- FUN.list[[condition]]

どちらの場合も、出力はnet入力として受け取る関数なので (のようにrandomX)、次のようにして評価できます。

FUN(net)

また、2 番目のアプローチを使用すると、すべてを 1 つの短いスクープで実行できることに注意してください。

FUN.list[[condition]](net)
于 2012-12-20T14:20:39.493 に答える
5

別の解決策は、呼び出したいすべての関数をリストにパックし、randoms次に基づいてリスト項目を選択することですcondition

randoms <- list(random1, random2, random3, random4, random5, random6, random7, random8, random9, random10)
FUN <- function(condition) {
  randoms[[condition]](net)
}
于 2012-12-20T13:56:24.507 に答える
4

switch関数を次のように使用します。

foo <- function(condition){
  switch(condition,
         '1' = print('B'),
         '2' = print('C'),
         '3' = print('D'),
         '4' = print('E'))
}

> foo(1)
[1] "B"
> foo(2)
[1] "C"
> foo(3)
[1] "D"
> foo(4)
[1] "E"

詳細は?switch

あなたの例に基づいて:

condition<-6
FUN<-function(condition){
    switch(condition,
    '1' = random1(net), # Maybe you're missing some commas here
    '2' = random2(net), # and here
    '3' = random3(net), # and here
    '4' = random4(net)
    ....) # all the way to '10' = random10(net)
}

これはトリックを行います

これは私にとってはうまくいきます:

Foo <- function(condition){
  x <- 1:20
  switch(condition,
         '1' = mean(x),
         '2' = var(x),
         '3' = sd(x))
}

> Foo(1)
[1] 10.5
> Foo(2)
[1] 35
> Foo(3)
[1] 5.91608
于 2012-12-20T12:54:39.953 に答える