2013-06-14 11 views
5

Czy w R istnieje sposób, aby instrukcja switch była taka, że ​​ten sam blok kodu jest wykonywany dla dwóch różnych przypadków? Oczywiście mogłem skopiować i wkleić cały kod dla obu stwierdzeń, ale miałem nadzieję, że będzie to lepszy sposób.Instrukcja przełączania z powtarzającymi się poleceniami w R

mogę również użyć if-else blok, aby uniknąć powtórki z dużych bloków kodu, ale przełączniki są na ogół szybciej R.

Wydaje się mało prawdopodobne ze względu na sposób analizowania R instrukcji switch w funkcji, ale mam nadzieję, że programiści R bardzo uważnie analizowali instrukcję switch, aby umożliwić wiele argumentów odwoływania się do tego samego bloku kodu.

+0

sposób w jaki mówisz o funkcji 'switch' nie ma dla mnie większego sensu, czy możesz podać mały przykład, który ilustruje, co próbujesz zrobić? – joran

+0

Nie jestem pewien, czy podążam, ale utworzenie funkcji z żądanym blokiem kodu umożliwiłoby to w prosty i R-ish sposób. – Justin

+0

@joran chce czegoś podobnego do przełącznika C, który ma "fall-through" zachowanie, chyba że dodano jawne 'break'. IIRC, jest to zazwyczaj złe, chociaż ludzie zakodowali w nim jakieś diabelskie ataki. Również {{cytowanie potrzebne}} na potwierdzenie, że zmiana jest szybsza niż w przypadku. –

Odpowiedz

7

Świadczenia nazwane argumenty bez wartości, wchodzą one do następnej wypowiedzi o wartości

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

Jest to opisane na stronie pomocy ?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

Dzięki. Zakładam, że nie działają tak, ponieważ w Javie potrzebujesz jawnego 'break', aby nie przejść do następnego wyrażenia; brak przerw doprowadził mnie do przekonania, że ​​w R. nigdy nie ma spadku. –