Comment utiliser l’instruction switch dans les fonctions R?

Je voudrais utiliser pour ma fonction dans R le switch() pour déclencher des calculs différents en fonction de la valeur de l’argument de la fonction.

Par exemple, dans Matlab, vous pouvez le faire en écrivant

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

J’ai trouvé cette utilisation de l’instruction post- switch () qui explique comment utiliser switch , mais qui ne m’aide pas vraiment car je souhaite effectuer des calculs plus sophistiqués (opérations masortingcielles) et non une simple méthode.

Eh bien, le switch n’était probablement pas vraiment destiné à fonctionner comme ça, mais vous pouvez:

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

… chaque cas est une expression – généralement juste une chose simple, mais ici j’utilise un bouclier pour que vous puissiez y insérer le code de votre choix …

J’espère que cet exemple aide. Vous pouvez utiliser les accolades pour vous assurer que tout est inclus dans le changeur de changeur (désolé de ne pas connaître le terme technique mais le terme qui précède le signe = qui change ce qui se passe). Je pense à switch comme un groupe plus contrôlé de if () {} else {} .

Chaque fois que la fonction de commutation est la même mais que la commande que nous fournissons change.

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

Ici c'est à l'intérieur d'une fonction:

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

ces différentes façons de basculer

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