Οι αληθείς ή ψευδείς τιμές αναπαρίστανται από τον τύπο logical.
Περιέχει μόνο δύο τιμές: TRUE και FALSE.
TRUE
#> [1] TRUE
FALSE
#> [1] FALSE
typeof(TRUE)
#> [1] "logical"
Υπάρχουν πέντε τελεστές Boolean στην R.
!TRUE # FALSE (not)
TRUE && FALSE # FALSE (scalar and)
TRUE || FALSE # TRUE (scalar or)
TRUE & FALSE # FALSE (vector and)
TRUE | FALSE # TRUE (vector or)
Οι && και & είναι το Boolean "and".
Αξιολογούνται ως TRUE αν οι εκφράσεις και στις δύο πλευρές του && είναι TRUE.
Οι || και | είναι το Boolean "or".
Αξιολογούνται ως TRUE αν μια έκφραση σε οποιαδήποτε από τις δύο πλευρές του || είναι TRUE.
Σημείωσε ότι υπάρχουν δύο σύνολα τελεστών and/or.
Αυτή η διάκριση θα γίνει σημαντική, και πιθανώς πιο ξεκάθαρη, στην έννοια vector-filtering.
Η χρήση των & και | σε μεμονωμένες τιμές λειτουργεί στο παραπάνω παράδειγμα, γιατί αυτές αντιμετωπίζονται ως διανύσματα μήκους 1.
Η συμπεριφορά είναι ελαφρώς διαφορετική από τους τελεστές με δύο χαρακτήρες, καθώς μόνο οι τελευταίοι κάνουν "short-circuit": η τιμή στα δεξιά δεν αξιολογείται αν η τιμή στα αριστερά αρκεί για να καθορίσει το αποτέλεσμα.
Έτσι, το TRUE || anything είναι πάντα TRUE, ανεξάρτητα από το ποια λογική έκφραση αντιπροσωπεύει το anything, οπότε το anything αγνοείται.
Η χρήση των && ή || σε διανύσματα (μήκους 2 ή περισσότερο) σημαίνει ότι μόνο το πρώτο στοιχείο χρησιμοποιείται στη σύγκριση, δίνοντας ένα μόνο TRUE/FALSE και πιθανώς ένα προειδοποιητικό μήνυμα.
Πιθανώς αυτό να μην είναι αυτό που είχες στο μυαλό σου.
Το ! είναι το Boolean "not".
Ανταλλάσσει τις τιμές TRUE και FALSE.
!TRUE
#> [1] FALSE
!FALSE
#> [1] TRUE
Για μεγαλύτερες και πιο περίπλοκες εκφράσεις, είναι καλύτερα να χρησιμοποιείς παρενθέσεις για να είναι ξεκάθαρη η πρόθεσή σου.
(TRUE || FALSE) && (FALSE && TRUE)
#> [1] FALSE
TRUE || FALSE && (FALSE && TRUE)
#> [1] TRUE
Δεν υπάρχει τελεστής infix για το αποκλειστικό ή (δηλαδή A ή B, αλλά όχι και τα δύο). Σε αυτή την περίπτωση μπορεί να χρησιμοποιηθεί η συνάρτηση xor().
xor(TRUE, FALSE)
#> [1] TRUE
xor(TRUE, TRUE)
#> [1] FALSE