Paging shows a slice of rows while preserving the full table in memory.

Program

Play the script to change the page size and see the second-page window move.

page_size
table_paging.R
Replay: real traced execution (multi-file project)
rows <- paste0("row", 1:8)
page_size <- 3
start <- page_size + 1
end <- min(length(rows), page_size * 2)
visible <- rows[start:end]
label <- paste(visible, collapse = ",")
cat(label, "\n", sep = "")
rows <- paste0("row", 1:8)
page_size <- 2
start <- page_size + 1
end <- min(length(rows), page_size * 2)
visible <- rows[start:end]
label <- paste(visible, collapse = ",")
cat(label, "\n", sep = "")
rows <- paste0("row", 1:8)
page_size <- 4
start <- page_size + 1
end <- min(length(rows), page_size * 2)
visible <- rows[start:end]
label <- paste(visible, collapse = ",")
cat(label, "\n", sep = "")
  1. rows ← row1, row2, row3, row4, row5, row6, row7, row8

    1rows <- paste0("row", 1:8)2page_size <- 3
    values this steprow1, row2, row3, row4, row5, row6, row7, row8rows
  2. page_size ← 3

    1rows <- paste0("row", 1:8)2page_size <- 33start <- page_size + 1
    values this step3page_size
  3. start ← 4

    2page_size <- 33start <- page_size + 14end <- min(length(rows), page_size * 2)
    values this step4start3page_size
  4. end ← 6

    3start <- page_size + 14end <- min(length(rows), page_size * 2)5visible <- rows[start:end]
    values this step6end8 rowsrows3page_size
  5. visible ← row4, row5, row6

    4end <- min(length(rows), page_size * 2)5visible <- rows[start:end]6label <- paste(visible, collapse = ",")
    values this steprow4, row5, row6visible4start6end
  6. label ← row4,row5,row6

    5visible <- rows[start:end]6label <- paste(visible, collapse = ",")7cat(label, "\n", sep = "")
    values this steprow4,row5,row6label3 rowsvisible
  7. cat(label, " ", sep = "")

    6label <- paste(visible, collapse = ",")7cat(label, "\n", sep = "")
    outputrow4,row5,row6
    values this steprow4,row5,row6label
  1. rows ← row1, row2, row3, row4, row5, row6, row7, row8

    1rows <- paste0("row", 1:8)2page_size <- 2
    values this steprow1, row2, row3, row4, row5, row6, row7, row8rows
  2. page_size ← 2

    1rows <- paste0("row", 1:8)2page_size <- 23start <- page_size + 1
    values this step2page_size
  3. start ← 3

    2page_size <- 23start <- page_size + 14end <- min(length(rows), page_size * 2)
    values this step3start2page_size
  4. end ← 4

    3start <- page_size + 14end <- min(length(rows), page_size * 2)5visible <- rows[start:end]
    values this step4end8 rowsrows2page_size
  5. visible ← row3, row4

    4end <- min(length(rows), page_size * 2)5visible <- rows[start:end]6label <- paste(visible, collapse = ",")
    values this steprow3, row4visible3start4end
  6. label ← row3,row4

    5visible <- rows[start:end]6label <- paste(visible, collapse = ",")7cat(label, "\n", sep = "")
    values this steprow3,row4label2 rowsvisible
  7. cat(label, " ", sep = "")

    6label <- paste(visible, collapse = ",")7cat(label, "\n", sep = "")
    outputrow3,row4
    values this steprow3,row4label
  1. rows ← row1, row2, row3, row4, row5, row6, row7, row8

    1rows <- paste0("row", 1:8)2page_size <- 4
    values this steprow1, row2, row3, row4, row5, row6, row7, row8rows
  2. page_size ← 4

    1rows <- paste0("row", 1:8)2page_size <- 43start <- page_size + 1
    values this step4page_size
  3. start ← 5

    2page_size <- 43start <- page_size + 14end <- min(length(rows), page_size * 2)
    values this step5start4page_size
  4. end ← 8

    3start <- page_size + 14end <- min(length(rows), page_size * 2)5visible <- rows[start:end]
    values this step8end8 rowsrows4page_size
  5. visible ← row5, row6, row7, row8

    4end <- min(length(rows), page_size * 2)5visible <- rows[start:end]6label <- paste(visible, collapse = ",")
    values this steprow5, row6, row7, row8visible5start8end
  6. label ← row5,row6,row7,row8

    5visible <- rows[start:end]6label <- paste(visible, collapse = ",")7cat(label, "\n", sep = "")
    values this steprow5,row6,row7,row8label4 rowsvisible
  7. cat(label, " ", sep = "")

    6label <- paste(visible, collapse = ",")7cat(label, "\n", sep = "")
    outputrow5,row6,row7,row8
    values this steprow5,row6,row7,row8label
page size `page_size` controls how many rows appear in one window.
window bounds `start` and `end` identify the visible row positions.
slice `rows[start:end]` selects only the current page.