A quick row-count check catches partial imports before analysis starts.

Program

Play the script to change the expected row count and compare it with the imported rows.

expected_rows
row_counts.R
Replay: real traced execution (multi-file project)
expected_rows <- 4
rows <- c("Ada", "Bo", "Chen", "Dia")
actual_rows <- length(rows)
status <- if (actual_rows == expected_rows) "match" else "review"
delta <- actual_rows - expected_rows
label <- paste(status, delta, sep = ":")
cat(label, "\n", sep = "")
expected_rows <- 3
rows <- c("Ada", "Bo", "Chen", "Dia")
actual_rows <- length(rows)
status <- if (actual_rows == expected_rows) "match" else "review"
delta <- actual_rows - expected_rows
label <- paste(status, delta, sep = ":")
cat(label, "\n", sep = "")
expected_rows <- 5
rows <- c("Ada", "Bo", "Chen", "Dia")
actual_rows <- length(rows)
status <- if (actual_rows == expected_rows) "match" else "review"
delta <- actual_rows - expected_rows
label <- paste(status, delta, sep = ":")
cat(label, "\n", sep = "")
  1. expected_rows ← 4

    1expected_rows <- 42rows <- c("Ada", "Bo", "Chen", "Dia")
    values this step4expected_rows
  2. rows ← Ada, Bo, Chen, Dia

    1expected_rows <- 42rows <- c("Ada", "Bo", "Chen", "Dia")3actual_rows <- length(rows)
    values this stepAda, Bo, Chen, Diarows
  3. actual_rows ← 4

    2rows <- c("Ada", "Bo", "Chen", "Dia")3actual_rows <- length(rows)4status <- if (actual_rows == expected_rows) "match" else "review"
    values this step4actual_rows4 rowsrows
  4. status ← match

    3actual_rows <- length(rows)4status <- if (actual_rows == expected_rows) "match" else "review"5delta <- actual_rows - expected_rows
    values this stepmatchstatus4actual_rows4expected_rows
  5. delta ← 0

    4status <- if (actual_rows == expected_rows) "match" else "review"5delta <- actual_rows - expected_rows6label <- paste(status, delta, sep = ":")
    values this step0delta4actual_rows4expected_rows
  6. label ← match:0

    5delta <- actual_rows - expected_rows6label <- paste(status, delta, sep = ":")7cat(label, "\n", sep = "")
    values this stepmatch:0labelmatchstatus0delta
  7. cat(label, " ", sep = "")

    6label <- paste(status, delta, sep = ":")7cat(label, "\n", sep = "")
    outputmatch:0
    values this stepmatch:0label
  1. expected_rows ← 3

    1expected_rows <- 32rows <- c("Ada", "Bo", "Chen", "Dia")
    values this step3expected_rows
  2. rows ← Ada, Bo, Chen, Dia

    1expected_rows <- 32rows <- c("Ada", "Bo", "Chen", "Dia")3actual_rows <- length(rows)
    values this stepAda, Bo, Chen, Diarows
  3. actual_rows ← 4

    2rows <- c("Ada", "Bo", "Chen", "Dia")3actual_rows <- length(rows)4status <- if (actual_rows == expected_rows) "match" else "review"
    values this step4actual_rows4 rowsrows
  4. status ← review

    3actual_rows <- length(rows)4status <- if (actual_rows == expected_rows) "match" else "review"5delta <- actual_rows - expected_rows
    values this stepreviewstatus4actual_rows3expected_rows
  5. delta ← 1

    4status <- if (actual_rows == expected_rows) "match" else "review"5delta <- actual_rows - expected_rows6label <- paste(status, delta, sep = ":")
    values this step1delta4actual_rows3expected_rows
  6. label ← review:1

    5delta <- actual_rows - expected_rows6label <- paste(status, delta, sep = ":")7cat(label, "\n", sep = "")
    values this stepreview:1labelreviewstatus1delta
  7. cat(label, " ", sep = "")

    6label <- paste(status, delta, sep = ":")7cat(label, "\n", sep = "")
    outputreview:1
    values this stepreview:1label
  1. expected_rows ← 5

    1expected_rows <- 52rows <- c("Ada", "Bo", "Chen", "Dia")
    values this step5expected_rows
  2. rows ← Ada, Bo, Chen, Dia

    1expected_rows <- 52rows <- c("Ada", "Bo", "Chen", "Dia")3actual_rows <- length(rows)
    values this stepAda, Bo, Chen, Diarows
  3. actual_rows ← 4

    2rows <- c("Ada", "Bo", "Chen", "Dia")3actual_rows <- length(rows)4status <- if (actual_rows == expected_rows) "match" else "review"
    values this step4actual_rows4 rowsrows
  4. status ← review

    3actual_rows <- length(rows)4status <- if (actual_rows == expected_rows) "match" else "review"5delta <- actual_rows - expected_rows
    values this stepreviewstatus4actual_rows5expected_rows
  5. delta ← -1

    4status <- if (actual_rows == expected_rows) "match" else "review"5delta <- actual_rows - expected_rows6label <- paste(status, delta, sep = ":")
    values this step-1delta4actual_rows5expected_rows
  6. label ← review:-1

    5delta <- actual_rows - expected_rows6label <- paste(status, delta, sep = ":")7cat(label, "\n", sep = "")
    values this stepreview:-1labelreviewstatus-1delta
  7. cat(label, " ", sep = "")

    6label <- paste(status, delta, sep = ":")7cat(label, "\n", sep = "")
    outputreview:-1
    values this stepreview:-1label
row count `length(rows)` represents the number of imported records.
expectation `expected_rows` makes the import contract explicit.
delta The difference points to missing or unexpected rows.