Jak pojawia się pytanie, czy istnieje sekwencja kontrolna w R podobna do operatora trójskładnikowego C ? Jeśli tak, jak z niego korzystasz? Dzięki!
175
Jak pojawia się pytanie, czy istnieje sekwencja kontrolna w R podobna do operatora trójskładnikowego C ? Jeśli tak, jak z niego korzystasz? Dzięki!
ifelse
, czy po prostu bardziej kompaktowej formy?if (x>1) y=2 else y=3
. Pisaniey=
raz ma do tego pewien urok.Odpowiedzi:
Tak jak
if
funkcja wR
i zwraca ostatnią ocenę, jeśli-else jest równoważne?:
.Moc R to wektoryzacja. Wektoryzacja operatora trójskładnikowego to
ifelse
:Żartuję, możesz zdefiniować styl c
?:
:tutaj nie musisz dbać o nawiasy:
ale potrzebujesz nawiasów do przypisania :(
Wreszcie możesz zrobić bardzo podobny sposób z c:
Możesz pozbyć się nawiasów:
Nie są one do codziennego użytku, ale mogą być przydatne do nauki niektórych wewnętrznych elementów języka R.
źródło
Jak wszyscy mówili, użyj
ifelse
, ale możesz zdefiniować operatory, aby uzyskać prawie trójskładnikową składnię operatorów.W rzeczywistości działa, jeśli zdefiniujesz operatory bez
%
znaków, więc możesz to zrobić(Działa to, ponieważ pierwszeństwo
:
jest mniejsze niż?
).Niestety, to zrywa istniejącą pomoc i operatory sekwencji.
źródło
Tylko jako żart, to może przedefiniować
?
operatorowi (prawie) jak praca operatora potrójnego (jest to zły pomysł):... Ale musisz umieścić wyrażenia w nawiasach, ponieważ domyślny priorytet nie jest taki jak w C.
Pamiętaj tylko, aby przywrócić starą funkcję pomocy, gdy skończysz grać:
źródło
Rzuciłem okiem na
ifelse
polecenie. Nazwałbym to jeszcze lepiej, ponieważ jest również zwektoryzowany. Przykład wykorzystujący zbiór danych samochodów:źródło
ifelse
swoim przykładem? ;)Twój link wskazuje na
if
oświadczenie.Jeśli zmienną wejściową jest wektor,
ifelse
może być bardziej odpowiednie:Aby uzyskać dostęp do strony pomocy dla
if
, musisz osadzićif
lewe znaczniki:Strona pomocy dla
ifelse
:źródło
print(if (x<2) "Less than" else "Greater than")
Nie istnieje, ale możesz to zrobić:
lub
Różnica pomiędzy nimi jest to, że
condition1
musi być logicznie wektor o długości 1, acondition2
musi być logicznie wektor tej samej długościx
,y
orazz
. Pierwsza zwróci alboy
lubz
(cały obiekt), podczas gdy druga zwróci odpowiedni elementy
(condition2==TRUE
) lubz
(condition2==FALSE
).Należy także zwrócić uwagę, że
ifelse
jest dłuższy niżif
/else
jeślicondition
,y
iz
są wektorami o długości 1.źródło
if
działa jak niewektorowany ifelse, jeśli jest używany w następujący sposób:Zaletą korzystania z tego w porównaniu z ifelse jest sytuacja, w której wektoryzacja jest przeszkodą (tj. Mam w rezultacie skalarną wartość logiczną i listę / wektor)
źródło