مقدارهای درست یا غلط با نوع logical نمایش داده میشوند.
این نوع فقط دو مقدار دارد: TRUE و FALSE.
TRUE
#> [1] TRUE
FALSE
#> [1] FALSE
typeof(TRUE)
#> [1] "logical"
در R پنج عملگر «منطقی» وجود دارد.
!TRUE # FALSE (not)
TRUE && FALSE # FALSE (scalar and)
TRUE || FALSE # TRUE (scalar or)
TRUE & FALSE # FALSE (vector and)
TRUE | FALSE # TRUE (vector or)
&& و & عملگر «و» منطقی هستند.
اگر عبارتهای هر دو طرف && مقدار TRUE داشته باشند، به TRUE ارزیابی میشوند.
|| و | عملگر «یا» منطقی هستند.
اگر عبارت یکی از دو طرف || مقدار TRUE باشد، به TRUE ارزیابی میشوند.
توجه کنید که دو مجموعه عملگر «و/یا» وجود دارد.
این تفاوت در مفهوم vector-filtering مهم میشود و احتمالاً روشنتر هم خواهد شد.
استفاده از & و | روی مقادیر تک در مثال بالا کار میکند، چون اینها بهعنوان بردارهایی با طول ۱ در نظر گرفته میشوند.
رفتارشان با عملگرهای دوکاراکتری تفاوت ظریفی دارد، چون فقط دومیها «اتصال کوتاه» هستند: اگر مقدار چپ برای تعیین نتیجه کافی باشد، مقدار سمت راست ارزیابی نمیشود.
بنابراین صرفنظر از اینکه anything چه عبارت منطقیای را نشان دهد، TRUE || anything همیشه TRUE است و anything نادیده گرفته میشود.
استفاده از && یا || روی بردارها (با طول ۲ یا بیشتر) یعنی در مقایسه فقط عنصر اول استفاده میشود، که به یک TRUE/FALSE واحد و احتمالاً یک پیام هشدار میانجامد.
احتمالاً این چیزی نیست که میخواستید.
! عملگر «نقیض» منطقی است.
این عملگر مقادیر TRUE و FALSE را با هم جابهجا میکند.
!TRUE
#> [1] FALSE
!FALSE
#> [1] TRUE
برای عبارتهای طولانیتر و پیچیدهتر، بهتر است از پرانتز استفاده کنید تا منظورتان روشن باشد.
(TRUE || FALSE) && (FALSE && TRUE)
#> [1] FALSE
TRUE || FALSE && (FALSE && TRUE)
#> [1] TRUE
عملگر میانوندی برای یا انحصاری وجود ندارد (یعنی A یا B، اما نه هر دو). در این حالت میتوان از تابع xor() استفاده کرد.
xor(TRUE, FALSE)
#> [1] TRUE
xor(TRUE, TRUE)
#> [1] FALSE