2010-03-18 2 views
0

TRUE/FALSE si les clauses sont facilement et rapidement exécutées dans R. Cependant, si l'argument devient plus complexe, il devient également très moche très bientôt. Par exemple: Je pourrais vouloir exécuter différentes opérations pour une ligne (foo) dépendant de la valeur dans une cellule (foo[1]). Laissez les intervalles et être 00:39 40:59 et 60: 100Des clauses simples et courtes pour les instructions de combinaison

Quelque chose comme ne sort pas:

(if foo[1] "in" 40:60){... 

En fait, je ne vois que des moyens d'au moins deux si les clauses et deux déclarations d'autre et l'action pour le premier intervalle quelque part au bas du code. Avec plus d'intervalles (ou toute autre condition), il devient plus complexe.

Y at-il une meilleure pratique (à cet effet ou d'autres) avec une construction simple et un design agréable à lire?

+0

J'ai trouvé difficile de suivre votre question complètement. Parlez-vous de quelque chose dans les lignes de "commutateur"? –

+0

@jorgusch - Vous obtiendrez une meilleure réponse si vous fournissez plus d'exemples pour votre problème. Essayez de fournir quelques exemples de données et ce à quoi vous voulez que la sortie ressemble. – Shane

+0

Je suis désolé, j'ai essayé de généraliser la question un peu trop, je suppose. Heureux que Musa ait donné une très bonne solution au problème. Je vais rester simple la prochaine fois. – jorgusch

Répondre

1

Pas tout à fait sûr, mais je suggère d'utiliser quelque chose comme:

f <- approxfun(0:100,c(rep(1,40),rep(2,20),rep(3,41)),method="c") 
fac <- f(foo) 
tapply(foo,fac,FUN,...) 

où vous pouvez utiliser la fonction FUN.

+0

C'est vraiment gentil! Merci! – jorgusch

0

Vous ne répondez pas tout à fait à votre question. Êtes-vous à la recherche d'une déclaration de changement? Jetez un oeil à cet exemple:

ccc <- c("b","QQ","a","A","bb") 
for(ch in ccc) 
    cat(ch,":",switch(EXPR = ch, a=1,  b=2:3), "\n")