88

switch()関数の引数の値に応じて異なる計算をトリガーするステートメントを R の関数に使用したいと思います。

たとえば、Matlab では次のように記述して実行できます。

switch(AA)        
case '1'   
...   
case '2'   
...   
case '3'  
...  
end

このポスト - switch() ステートメントの使用法- の使用方法を説明していることswitchがわかりましたが、単純なmean.

4

4 に答える 4

119

まあ、switchおそらくこのように動作することを意図したものではありませんが、次のことができます。

AA = 'foo'
switch(AA, 
foo={
  # case 'foo' here...
  print('foo')
},
bar={
  # case 'bar' here...
  print('bar')    
},
{
   print('default')
}
)

...各ケースは式です-通常は単純なものですが、ここではカーリーブロックを使用して、そこに必要なコードを詰め込むことができます...

于 2012-05-01T04:27:52.003 に答える
53

それらのさまざまな切り替え方法...

# by index
switch(1, "one", "two")
## [1] "one"


# by index with complex expressions
switch(2, {"one"}, {"two"})
## [1] "two"


# by index with complex named expression
switch(1, foo={"one"}, bar={"two"})
## [1] "one"


# by name with complex named expression
switch("bar", foo={"one"}, bar={"two"})
## [1] "two"
于 2015-07-16T09:07:03.640 に答える
47

この例が役立つことを願っています。中括弧を使用して、すべてが switcher changer guy に含まれていることを確認できます (技術用語はわかりませんが、= 記号の前にある用語は、何が起こるかを変更します)。私は switch をより制御された一連のif () {} else {}ステートメントと考えています。

スイッチ機能は同じですが、提供するコマンドは毎回異なります。

do.this <- "T1"

switch(do.this,
    T1={X <- t(mtcars)
        colSums(mtcars)%*%X
    },
    T2={X <- colMeans(mtcars)
        outer(X, X)
    },
    stop("Enter something that switches me!")
)
#########################################################
do.this <- "T2"

switch(do.this,
    T1={X <- t(mtcars)
        colSums(mtcars)%*%X
    },
    T2={X <- colMeans(mtcars)
        outer(X, X)
    },
    stop("Enter something that switches me!")
)
########################################################
do.this <- "T3"

switch(do.this,
    T1={X <- t(mtcars)
        colSums(mtcars)%*%X
    },
    T2={X <- colMeans(mtcars)
        outer(X, X)
    },
    stop("Enter something that switches me!")
)

これは関数内にあります。

FUN <- function(df, do.this){
    switch(do.this,
        T1={X <- t(df)
            P <- colSums(df)%*%X
        },
        T2={X <- colMeans(df)
            P <- outer(X, X)
        },
        stop("Enter something that switches me!")
    )
    return(P)
}

FUN(mtcars, "T1")
FUN(mtcars, "T2")
FUN(mtcars, "T3")
于 2012-05-01T04:30:32.460 に答える