تُمثَّل القيم الصحيحة أو الخاطئة بالنوع 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.
استخدام & و| على قيم مفردة ينجح في المثال أعلاه، لأنها تُعامَل كمتجهات بطول 1.
غير أن السلوك يختلف اختلافًا طفيفًا عن عاملي الحرفين المزدوجين، إذ إن الأخيرين وحدهما يعملان بالتقييم القصير: لا تُقيَّم القيمة على اليمين إذا كانت القيمة على اليسار كافية لتحديد النتيجة.
وبالتالي فإن TRUE || anything تكون دائمًا TRUE مهما كان التعبير المنطقي الذي يمثله anything، فيُتجاهَل anything.
استخدام && أو || على متجهات (بطول 2 أو أكثر) يعني أن العنصر الأول وحده يُستخدم في المقارنة، ما يُنتج قيمة 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