R Language

The logical class

Introduction#

Logical is a mode (and an implicit class) for vectors.

Remarks#

Shorthand

TRUE, FALSE and NA are the only values for logical vectors; and all three are reserved words. T and F can be shorthand for TRUE and FALSE in a clean R session, but neither T nor F are reserved, so assignment of non-default values to those names can set users up for difficulties.

Logical operators

There are two sorts of logical operators: those that accept and return vectors of any length (elementwise operators: !, |, &, xor()) and those that only evaluate the first element in each argument (&&, ||). The second sort is primarily used as the cond argument to the if function.

Logical Operator Meaning Syntax
! Not !x
& element-wise (vectorized) and x & y
&& and (single element only) x && y
| element-wise (vectorized) or x | y
|| or (single element only) x || y
xor element-wise (vectorized) exclusive OR xor(x,y)
---------------------

Note that the || operator evaluates the left condition and if the left condition is TRUE the right side is never evaluated. This can save time if the first is the result of a complex operation. The && operator will likewise return FALSE without evaluation of the second argument when the first element of the first argument is FALSE.

> x <- 5
> x > 6 || stop("X is too small")
Error: X is too small
> x > 3 || stop("X is too small")
[1] TRUE

To check whether a value is a logical you can use the is.logical() function.

Coercion

To coerce a variable to a logical use the as.logical() function.

> x <- 2
> z <- x > 4
> z
[1] FALSE
> class(x)
[1] "numeric"
> as.logical(2)
[1] TRUE

When applying as.numeric() to a logical, a double will be returned. NA is a logical value and a logical operator with an NA will return NA if the outcome is ambiguous.

Interpretation of NAs

See https://stackoverflow.com/documentation/r/3388 for details.

> TRUE & NA
[1] NA
> FALSE & NA
[1] FALSE
> TRUE || NA
[1] TRUE
> FALSE || NA
[1] NA

This modified text is an extract of the original Stack Overflow Documentation created by the contributors and released under CC BY-SA 3.0 This website is not affiliated with Stack Overflow