Bird
Raised Fist0
R Programmingprogramming~5 mins

Logical operators (&, |, !, &&, ||) in R Programming - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Logical operators (&, |, !, &&, ||)
O(n)
Understanding Time Complexity

Logical operators are used to combine or invert true/false values in R. Understanding their time complexity helps us see how fast these checks run as we handle more data.

We want to know how the time to evaluate these operators changes when we use them on vectors of different sizes.

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


# Logical AND on two vectors
x <- c(TRUE, FALSE, TRUE, FALSE)
y <- c(FALSE, FALSE, TRUE, TRUE)
result <- x & y

# Logical OR on two vectors
result_or <- x | y

# Logical NOT on a vector
result_not <- !x
    

This code performs element-wise logical AND, OR, and NOT operations on vectors of boolean values.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Element-wise logical operations on vectors.
  • How many times: Once per element in the vectors.
How Execution Grows With Input

Each logical operator checks every element in the input vectors one by one.

Input Size (n)Approx. Operations
1010 checks
100100 checks
10001000 checks

Pattern observation: The number of operations grows directly with the number of elements.

Final Time Complexity

Time Complexity: O(n)

This means the time to complete the logical operations grows in a straight line with the size of the input vectors.

Common Mistake

[X] Wrong: "Logical operators run instantly no matter how big the vectors are."

[OK] Correct: Each element must be checked, so bigger vectors take more time, not zero time.

Interview Connect

Knowing how logical operations scale helps you write efficient code when working with large data sets, a skill valued in many programming tasks.

Self-Check

"What if we used the short-circuit operators (&&, ||) on vectors instead of element-wise operators? How would the time complexity change?"

Practice

(1/5)
1. Which logical operator in R checks every element of a vector and returns a vector of results?
easy
A. ==
B. & and |
C. !
D. && and ||

Solution

  1. Step 1: Understand vectorized logical operators

    In R, & and | operate element-wise on vectors, returning a vector of TRUE/FALSE values for each element.
  2. Step 2: Compare with single-element operators

    && and || only check the first element of the vectors and return a single TRUE/FALSE value.
  3. Final Answer:

    & and | -> Option B
  4. Quick Check:

    Element-wise operators = & and | [OK]
Hint: Use & and | for vectors, && and || for single values [OK]
Common Mistakes:
  • Confusing && and & as the same
  • Using || for vector comparisons
  • Thinking ! works on multiple elements like &
2. Which of the following is the correct syntax to negate a logical vector v in R?
easy
A. !v
B. not(v)
C. ~v
D. v != TRUE

Solution

  1. Step 1: Identify the negation operator in R

    The logical NOT operator in R is !, which negates each element of a logical vector.
  2. Step 2: Check other options

    not() is not a base R function, ~ is a formula operator, and v != TRUE works but is less direct and less clear.
  3. Final Answer:

    !v -> Option A
  4. Quick Check:

    Negate vector with ! [OK]
Hint: Use ! to flip TRUE/FALSE values in R [OK]
Common Mistakes:
  • Using not() which is not a base R function
  • Confusing ~ with negation
  • Using != TRUE instead of !
3. What is the output of the following R code?
v1 <- c(TRUE, FALSE, TRUE)
v2 <- c(FALSE, FALSE, TRUE)
v1 & v2
v1 && v2
medium
A. [1] TRUE TRUE TRUE [1] TRUE
B. [1] TRUE FALSE TRUE [1] TRUE
C. [1] FALSE FALSE FALSE [1] FALSE
D. [1] FALSE FALSE TRUE [1] FALSE

Solution

  1. Step 1: Evaluate element-wise AND with &

    v1 & v2 compares each element:
    TRUE & FALSE = FALSE
    FALSE & FALSE = FALSE
    TRUE & TRUE = TRUE
    Result: [FALSE FALSE TRUE]
  2. Step 2: Evaluate single-element AND with &&

    v1 && v2 checks only first elements:
    TRUE && FALSE = FALSE
    Result: [FALSE]
  3. Final Answer:

    [1] FALSE FALSE TRUE [1] FALSE -> Option D
  4. Quick Check:

    & compares all elements, && only first [OK]
Hint: & works element-wise; && checks first element only [OK]
Common Mistakes:
  • Thinking && works element-wise
  • Mixing up & and && results
  • Ignoring vector length in &&
4. Identify the error in this R code snippet:
v <- c(TRUE, FALSE, TRUE)
if (v & TRUE) {
  print("Yes")
} else {
  print("No")
}
medium
A. Using & inside if condition causes error due to vector length
B. Missing parentheses around v & TRUE
C. Should use | instead of &
D. No error, code runs fine

Solution

  1. Step 1: Understand if condition requirements

    The if statement expects a single TRUE or FALSE value, not a vector.
  2. Step 2: Analyze v & TRUE

    v & TRUE returns a logical vector of length 3, which causes an error in if because it cannot handle multiple values.
  3. Final Answer:

    Using & inside if condition causes error due to vector length -> Option A
  4. Quick Check:

    if needs single TRUE/FALSE, & returns vector [OK]
Hint: Use && in if conditions for single TRUE/FALSE [OK]
Common Mistakes:
  • Using & instead of && in if
  • Assuming if accepts vector
  • Ignoring error message about length
5. You have two logical vectors:
a <- c(TRUE, FALSE, TRUE, FALSE)
b <- c(FALSE, TRUE, TRUE, TRUE)

Write an expression using logical operators to find elements where either a is TRUE and b is FALSE, or a is FALSE and b is TRUE. What is the resulting vector?
hard
A. a | b resulting in [TRUE TRUE TRUE TRUE]
B. a & b resulting in [FALSE FALSE TRUE FALSE]
C. (a & !b) | (!a & b) resulting in [TRUE TRUE FALSE TRUE]
D. !(a | b) resulting in [FALSE FALSE FALSE FALSE]

Solution

  1. Step 1: Understand the condition

    We want TRUE where exactly one of a or b is TRUE, but not both. This is the XOR condition.
  2. Step 2: Write expression and evaluate

    (a & !b) | (!a & b) checks where a is TRUE and b is FALSE, or vice versa.
    Evaluate:
    a: TRUE FALSE TRUE FALSE
    b: FALSE TRUE TRUE TRUE
    a & !b: TRUE FALSE FALSE FALSE
    !a & b: FALSE TRUE FALSE TRUE
    OR: TRUE TRUE FALSE TRUE
  3. Final Answer:

    (a & !b) | (!a & b) resulting in [TRUE TRUE FALSE TRUE] -> Option C
  4. Quick Check:

    XOR = (a & !b) | (!a & b) [OK]
Hint: Use (a & !b) | (!a & b) for XOR logic [OK]
Common Mistakes:
  • Using & or | alone instead of XOR logic
  • Forgetting to negate one vector
  • Confusing XOR with OR
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard