Performance Awareness
Vector Filter
Count Work Kept
Vectorized filters express the whole selection rule at once instead of one item at a time.
Program
Play the script to change the threshold and see how many values are kept.
vector_filter.R
Replay: real traced execution (multi-file project)
threshold <- 10
values <- c(4, 9, 12, 18)
kept <- values[values >= threshold]
count <- length(kept)
label <- paste("kept", count, sep = ":")
cat(label, "\n", sep = "")
threshold <- 5
values <- c(4, 9, 12, 18)
kept <- values[values >= threshold]
count <- length(kept)
label <- paste("kept", count, sep = ":")
cat(label, "\n", sep = "")
threshold <- 15
values <- c(4, 9, 12, 18)
kept <- values[values >= threshold]
count <- length(kept)
label <- paste("kept", count, sep = ":")
cat(label, "\n", sep = "")
threshold ← 10
1threshold <- 102values <- c(4, 9, 12, 18)values this step10thresholdvalues ← 4, 9, 12, 18
1threshold <- 102values <- c(4, 9, 12, 18)3kept <- values[values >= threshold]values this step4, 9, 12, 18valueskept ← 12, 18
2values <- c(4, 9, 12, 18)3kept <- values[values >= threshold]4count <- length(kept)values this step12, 18kept4, 9, 12, 18values10thresholdcount ← 2
3kept <- values[values >= threshold]4count <- length(kept)5label <- paste("kept", count, sep = ":")values this step2count12, 18keptlabel ← kept:2
4count <- length(kept)5label <- paste("kept", count, sep = ":")6cat(label, "\n", sep = "")values this stepkept:2label2countcat(label, " ", sep = "")
5label <- paste("kept", count, sep = ":")6cat(label, "\n", sep = "")outputkept:2values this stepkept:2label
threshold ← 5
1threshold <- 52values <- c(4, 9, 12, 18)values this step5thresholdvalues ← 4, 9, 12, 18
1threshold <- 52values <- c(4, 9, 12, 18)3kept <- values[values >= threshold]values this step4, 9, 12, 18valueskept ← 9, 12, 18
2values <- c(4, 9, 12, 18)3kept <- values[values >= threshold]4count <- length(kept)values this step9, 12, 18kept4, 9, 12, 18values5thresholdcount ← 3
3kept <- values[values >= threshold]4count <- length(kept)5label <- paste("kept", count, sep = ":")values this step3count9, 12, 18keptlabel ← kept:3
4count <- length(kept)5label <- paste("kept", count, sep = ":")6cat(label, "\n", sep = "")values this stepkept:3label3countcat(label, " ", sep = "")
5label <- paste("kept", count, sep = ":")6cat(label, "\n", sep = "")outputkept:3values this stepkept:3label
threshold ← 15
1threshold <- 152values <- c(4, 9, 12, 18)values this step15thresholdvalues ← 4, 9, 12, 18
1threshold <- 152values <- c(4, 9, 12, 18)3kept <- values[values >= threshold]values this step4, 9, 12, 18valueskept ← 18
2values <- c(4, 9, 12, 18)3kept <- values[values >= threshold]4count <- length(kept)values this step18kept4, 9, 12, 18values15thresholdcount ← 1
3kept <- values[values >= threshold]4count <- length(kept)5label <- paste("kept", count, sep = ":")values this step1count18keptlabel ← kept:1
4count <- length(kept)5label <- paste("kept", count, sep = ":")6cat(label, "\n", sep = "")values this stepkept:1label1countcat(label, " ", sep = "")
5label <- paste("kept", count, sep = ":")6cat(label, "\n", sep = "")outputkept:1values this stepkept:1label
vectorized rule
`values >= threshold` creates one logical decision per value.
subset
The bracket expression keeps all matching values in one statement.
work summary
Counting kept values summarizes how much data remains.