grepl returns a logical vector showing which strings match a pattern.

Program

Play the script to keep only names ending in .csv.

grepl_patterns.R
Replay: real traced execution (multi-file project)
files <- c("report.csv", "notes.txt", "sales.csv")
csv_files <- files[grepl("\\.csv$", files)]
count <- length(csv_files)
cat(count, "\n", sep = "")
  1. files ← report.csv, notes.txt, sales.csv

    1files <- c("report.csv", "notes.txt", "sales.csv")2csv_files <- files[grepl("\\.csv$", files)]
    values this stepreport.csv, notes.txt, sales.csvfiles
  2. csv_files ← report.csv, sales.csv

    1files <- c("report.csv", "notes.txt", "sales.csv")2csv_files <- files[grepl("\\.csv$", files)]3count <- length(csv_files)
    values this stepreport.csv, sales.csvcsv_filesreport.csv, notes.txt, sales.csvfiles
  3. count ← 2

    2csv_files <- files[grepl("\\.csv$", files)]3count <- length(csv_files)4cat(count, "\n", sep = "")
    values this step2countreport.csv, sales.csvcsv_files
  4. cat(count, " ", sep = "")

    3count <- length(csv_files)4cat(count, "\n", sep = "")
    output2
    values this step2count

Follow the Filter

  1. files starts as report.csv, notes.txt, and sales.csv.
  2. grepl("\\.csv$", files) checks whether each name ends with .csv.
  3. report.csv matches and stays selected.
  4. notes.txt does not match, while sales.csv does.
  5. count becomes 2, so the script prints 2. | file | matches .csv at end? | selected | | --- | --- | --- | | report.csv | TRUE | yes | | notes.txt | FALSE | no | | sales.csv | TRUE | yes |
grepl `grepl(pattern, files)` returns `TRUE` or `FALSE` for each file name.
regular expression `\\.csv$` means a literal `.csv` at the end of the string.
length `length(csv_files)` counts selected vector elements.

Exercise: grepl_patterns.R

Reproduce the printed count 2, then trace which two file names are selected.