Come usare l’istruzione switch in R function?

Vorrei usare per la mia funzione in R l’istruzione switch() per triggersre diversi calcoli in base al valore dell’argomento della funzione.

Ad esempio, in Matlab puoi farlo scrivendo

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

Ho trovato questo uso dell’istruzione post – switch () – che spiega come usare switch , ma non mi è di grande aiuto poiché voglio eseguire calcoli più sofisticati (operazioni con matrici) e non una semplice mean .

Beh, probabilmente switch non era pensato per funzionare in questo modo, ma puoi:

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

… ogni caso è un’espressione – di solito è solo una cosa semplice, ma qui uso un blocco riccio in modo da poter inserire qualsiasi codice che si desidera lì dentro …

Spero che questo esempio aiuti. Puoi usare le parentesi graffe per assicurarti di avere tutto racchiuso nel commutatore del commutatore (scusa non conosco il termine tecnico ma il termine che precede il segno = che cambia ciò che accade). Penso di passare a un gruppo più controllato di istruzioni if () {} else {} .

Ogni volta che la funzione dell’interruttore è la stessa, ma il comando che forniamo cambia.

 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!") ) 

Qui è all'interno di una funzione:

 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") 

quei vari modi di cambiare

 # 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"