2013-06-14 12 views
5

In R, esiste un modo per eseguire un'istruzione switch in modo che lo stesso blocco di codice venga eseguito per due casi diversi? Ovviamente potrei copiare e incollare tutto il codice del codice per entrambe le affermazioni, ma speravo che ci sarebbe stato un modo più ordinato per farlo.Istruzione switch con comandi ripetuti in R

mi potrebbe anche utilizzare un blocco if-else per evitare la ripetizione di grandi blocchi di codice ma interruttori sono generalmente più veloce in R.

Sembra improbabile dovuto al modo R analizza un'istruzione switch in funzione, ma spero che gli sviluppatori di R abbiano prestato particolare attenzione nell'analisi di un'istruzione switch per consentire a più argomenti di fare riferimento allo stesso blocco di codice.

+0

Il modo in cui si parla della funzione 'switch' non ha molto senso per me, puoi fornire un piccolo esempio per favore che illustra quello che stai cercando di fare? – joran

+0

Non sono sicuro che lo segua, ma la creazione di una funzione con il blocco di codice desiderato lo farebbe in modo semplice e di tipo R-ish. – Justin

+0

@joran vuole qualcosa di simile all'interruttore di C, che ha un comportamento "fall-through" a meno che non venga aggiunta una 'pausa' esplicita. IIRC, di solito è considerato una cosa negativa, anche se le persone hanno codificato alcuni hack diabolici con esso. Inoltre, {{citation needed}} sull'affermazione che switch sia più veloce di if. –

risposta

7

fornire nominato argomenti senza valori, cadono fino alla prossima espressione con valore

> switch("A", A=, B=, C="A OR B OR C", "Other") 
[1] "A OR B OR C" 
> switch("C", A=, B=, C="A OR B OR C", "Other") 
[1] "A OR B OR C" 
> switch("D", A=, B=, C="A OR B OR C", "Other") 
[1] "Other" 

Questo è descritto nella pagina di aiuto ?switch

If 'EXPR' evaluates to a character string then that string is 
matched (exactly)to the names of the elements in '...'. If there 
is a match then that element is evaluated unless it is missing, in 
which case the next non-missing element is evaluated, so for 
example 'switch("cc", a = 1, cc =, cd =, d = 2)' evaluates to '2'. 
+1

Grazie. Supponevo che non funzionassero così perché in Java è necessario l'esplicito 'break' da fare in modo che non passino all'espressione successiva; la mancanza di pause mi ha portato a credere che non ci sia mai stata una caduta in R. –

Problemi correlati