Interactive Tables
Table Sort
Reorder Rows
A sortable table keeps row values together while changing their display order.
Program
Play the script to choose a sort mode and watch the row order change.
table_sort.R
Replay: real traced execution (multi-file project)
item <- c("alpha", "beta", "gamma")
count <- c(5, 12, 8)
sort_mode <- 2
mode <- c("name", "count_desc", "count_asc")[sort_mode]
order_index <- switch(mode, name = order(item), count_desc = order(-count), count_asc = order(count))
rows <- paste(item[order_index], count[order_index], sep = "=")
label <- paste(rows, collapse = ",")
cat(label, "\n", sep = "")
item <- c("alpha", "beta", "gamma")
count <- c(5, 12, 8)
sort_mode <- 1
mode <- c("name", "count_desc", "count_asc")[sort_mode]
order_index <- switch(mode, name = order(item), count_desc = order(-count), count_asc = order(count))
rows <- paste(item[order_index], count[order_index], sep = "=")
label <- paste(rows, collapse = ",")
cat(label, "\n", sep = "")
item <- c("alpha", "beta", "gamma")
count <- c(5, 12, 8)
sort_mode <- 3
mode <- c("name", "count_desc", "count_asc")[sort_mode]
order_index <- switch(mode, name = order(item), count_desc = order(-count), count_asc = order(count))
rows <- paste(item[order_index], count[order_index], sep = "=")
label <- paste(rows, collapse = ",")
cat(label, "\n", sep = "")
item ← alpha, beta, gamma
1item <- c("alpha", "beta", "gamma")2count <- c(5, 12, 8)values this stepalpha, beta, gammaitemcount ← 5, 12, 8
1item <- c("alpha", "beta", "gamma")2count <- c(5, 12, 8)3sort_mode <- 2values this step5, 12, 8countsort_mode ← 2
2count <- c(5, 12, 8)3sort_mode <- 24mode <- c("name", "count_desc", "count_asc")[sort_mode]values this step2sort_modemode ← count_desc
3sort_mode <- 24mode <- c("name", "count_desc", "count_asc")[sort_mode]5order_index <- switch(mode, name = order(item), count_desc = order(-count), count_asc = order(count))values this stepcount_descmode2sort_modeorder_index ← 2, 3, 1
4mode <- c("name", "count_desc", "count_asc")[sort_mode]5order_index <- switch(mode, name = order(item), count_desc = order(-count), count_asc = order(count))6rows <- paste(item[order_index], count[order_index], sep = "=")values this step2, 3, 1order_indexcount_descmode5, 12, 8countrows ← beta=12, gamma=8, alpha=5
5order_index <- switch(mode, name = order(item), count_desc = order(-count), count_asc = order(count))6rows <- paste(item[order_index], count[order_index], sep = "=")7label <- paste(rows, collapse = ",")values this stepbeta=12, gamma=8, alpha=5rows2, 3, 1order_indexlabel ← beta=12,gamma=8,alpha=5
6rows <- paste(item[order_index], count[order_index], sep = "=")7label <- paste(rows, collapse = ",")8cat(label, "\n", sep = "")values this stepbeta=12,gamma=8,alpha=5label3 sorted rowsrowscat(label, " ", sep = "")
7label <- paste(rows, collapse = ",")8cat(label, "\n", sep = "")outputbeta=12,gamma=8,alpha=5values this stepbeta=12,gamma=8,alpha=5label
item ← alpha, beta, gamma
1item <- c("alpha", "beta", "gamma")2count <- c(5, 12, 8)values this stepalpha, beta, gammaitemcount ← 5, 12, 8
1item <- c("alpha", "beta", "gamma")2count <- c(5, 12, 8)3sort_mode <- 1values this step5, 12, 8countsort_mode ← 1
2count <- c(5, 12, 8)3sort_mode <- 14mode <- c("name", "count_desc", "count_asc")[sort_mode]values this step1sort_modemode ← name
3sort_mode <- 14mode <- c("name", "count_desc", "count_asc")[sort_mode]5order_index <- switch(mode, name = order(item), count_desc = order(-count), count_asc = order(count))values this stepnamemode1sort_modeorder_index ← 1, 2, 3
4mode <- c("name", "count_desc", "count_asc")[sort_mode]5order_index <- switch(mode, name = order(item), count_desc = order(-count), count_asc = order(count))6rows <- paste(item[order_index], count[order_index], sep = "=")values this step1, 2, 3order_indexnamemodealpha, beta, gammaitemrows ← alpha=5, beta=12, gamma=8
5order_index <- switch(mode, name = order(item), count_desc = order(-count), count_asc = order(count))6rows <- paste(item[order_index], count[order_index], sep = "=")7label <- paste(rows, collapse = ",")values this stepalpha=5, beta=12, gamma=8rows1, 2, 3order_indexlabel ← alpha=5,beta=12,gamma=8
6rows <- paste(item[order_index], count[order_index], sep = "=")7label <- paste(rows, collapse = ",")8cat(label, "\n", sep = "")values this stepalpha=5,beta=12,gamma=8label3 sorted rowsrowscat(label, " ", sep = "")
7label <- paste(rows, collapse = ",")8cat(label, "\n", sep = "")outputalpha=5,beta=12,gamma=8values this stepalpha=5,beta=12,gamma=8label
item ← alpha, beta, gamma
1item <- c("alpha", "beta", "gamma")2count <- c(5, 12, 8)values this stepalpha, beta, gammaitemcount ← 5, 12, 8
1item <- c("alpha", "beta", "gamma")2count <- c(5, 12, 8)3sort_mode <- 3values this step5, 12, 8countsort_mode ← 3
2count <- c(5, 12, 8)3sort_mode <- 34mode <- c("name", "count_desc", "count_asc")[sort_mode]values this step3sort_modemode ← count_asc
3sort_mode <- 34mode <- c("name", "count_desc", "count_asc")[sort_mode]5order_index <- switch(mode, name = order(item), count_desc = order(-count), count_asc = order(count))values this stepcount_ascmode3sort_modeorder_index ← 1, 3, 2
4mode <- c("name", "count_desc", "count_asc")[sort_mode]5order_index <- switch(mode, name = order(item), count_desc = order(-count), count_asc = order(count))6rows <- paste(item[order_index], count[order_index], sep = "=")values this step1, 3, 2order_indexcount_ascmode5, 12, 8countrows ← alpha=5, gamma=8, beta=12
5order_index <- switch(mode, name = order(item), count_desc = order(-count), count_asc = order(count))6rows <- paste(item[order_index], count[order_index], sep = "=")7label <- paste(rows, collapse = ",")values this stepalpha=5, gamma=8, beta=12rows1, 3, 2order_indexlabel ← alpha=5,gamma=8,beta=12
6rows <- paste(item[order_index], count[order_index], sep = "=")7label <- paste(rows, collapse = ",")8cat(label, "\n", sep = "")values this stepalpha=5,gamma=8,beta=12label3 sorted rowsrowscat(label, " ", sep = "")
7label <- paste(rows, collapse = ",")8cat(label, "\n", sep = "")outputalpha=5,gamma=8,beta=12values this stepalpha=5,gamma=8,beta=12label
order
`order(...)` returns row positions in sorted order.
switch
`switch(mode, ...)` selects the active sort rule.
row integrity
`item[order_index]` and `count[order_index]` keep columns aligned.