ifelse chooses values element by element. It avoids a loop when the same condition applies across a vector.

Program

Play the script to label three scores in one vectorized step.

ifelse_vector.R
Replay: real traced execution (multi-file project)
scores <- c(92, 71, 84)
labels <- ifelse(scores >= 80, "pass", "retry")
summary <- paste(labels, collapse = ",")
cat(summary, "\n", sep = "")
  1. scores ← 92, 71, 84

    1scores <- c(92, 71, 84)2labels <- ifelse(scores >= 80, "pass", "retry")
    values this step92, 71, 84scores
  2. labels ← pass, retry, pass

    1scores <- c(92, 71, 84)2labels <- ifelse(scores >= 80, "pass", "retry")3summary <- paste(labels, collapse = ",")
    values this steppass, retry, passlabelsTRUE, FALSE, TRUEscores >= 80
  3. summary ← pass,retry,pass

    2labels <- ifelse(scores >= 80, "pass", "retry")3summary <- paste(labels, collapse = ",")4cat(summary, "\n", sep = "")
    values this steppass,retry,passsummarypass, retry, passlabels
  4. cat(summary, " ", sep = "")

    3summary <- paste(labels, collapse = ",")4cat(summary, "\n", sep = "")
    outputpass,retry,pass
    values this steppass,retry,passsummary

Follow the Choices

  1. scores starts as c(92, 71, 84).
  2. R checks each score with scores >= 80.
  3. 92 and 84 choose "pass"; 71 chooses "retry".
  4. paste joins the labels into pass,retry,pass. | score | score >= 80 | label | | --- | --- | --- | | 92 | TRUE | pass | | 71 | FALSE | retry | | 84 | TRUE | pass |
ifelse `ifelse(test, yes, no)` chooses per position.
vectorized One expression operates across the whole vector.
logical vector `scores >= 80` supplies one `TRUE` or `FALSE` per score.

Exercise: ifelse_vector.R

Reproduce pass,retry,pass from the three scores, then change 71 to 80 and predict the joined labels before running it.