如何在R函数中使用switch语句?

我想用我的函数R语句switch()根据函数参数的值触发不同的计算。

例如,在Matlab中,你可以通过编写来完成

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

我发现这个post- switch()语句的用法 – 解释了如何使用switch ,但是对我来说并不真正有帮助,因为我想执行更复杂的计算(matrix操作)而不是简单的mean

那么, switch可能不是真的要这样工作,但你可以:

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

…每个案例都是一个expression式 – 通常只是一个简单的事情,但是在这里我使用了一个curl块,这样你就可以将任何你想要的代码填入…

我希望这个例子有所帮助。 你可以使用大括号来确保你已经把所有的东西都放在了切换器的变化者身上(对不起,不知道技术术语,而是在=号之前的术语改变了所发生的事情)。 我认为开关是一个更受控制的if () {} else {}语句。

每次开关function相同,但是我们提供的命令都会改变。

 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"