Как использовать оператор switch в функции R?
Я хотел бы использовать для моей функции в R заявлением switch()
для запуска различных вычислений в соответствии со значением аргумента функции.
например, в MATLAB вы можете сделать это, написав
switch(AA)
case '1'
...
case '2'
...
case '3'
...
end
Я нашел этот пост - использование оператора switch () - это объясняет, как использовать switch
, но не очень полезно для меня, поскольку я хочу выполнять более сложные вычисления (матричные операции), а не простой mean
.
3 ответа:
Ну
switch
вероятно, на самом деле не должно было так работать, но вы можете:AA = 'foo' switch(AA, foo={ # case 'foo' here... print('foo') }, bar={ # case 'bar' here... print('bar') }, { print('default') } )
...каждый случай-это выражение-обычно просто простая вещь, но здесь я использую фигурный блок, чтобы вы могли набить любой код, который вы хотите там...
Я надеюсь, что этот пример помогает. Вы можете использовать фигурные скобки, чтобы убедиться, что у вас есть все, что заключено в 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")
эти различные способы переключения ...
# 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"