Named lists can act like small records when related values need to travel together.

Program

Play the script to choose a field name and read the matching record value.

field_index
named_list_record.R
Replay: real traced execution (multi-file project)
field_index <- 2
record <- list(id = 101, score = 88, passed = TRUE)
field <- c("id", "score", "passed")[field_index]
value <- record[[field]]
label <- paste(field, value, sep = ":")
cat(label, "\n", sep = "")
field_index <- 1
record <- list(id = 101, score = 88, passed = TRUE)
field <- c("id", "score", "passed")[field_index]
value <- record[[field]]
label <- paste(field, value, sep = ":")
cat(label, "\n", sep = "")
field_index <- 3
record <- list(id = 101, score = 88, passed = TRUE)
field <- c("id", "score", "passed")[field_index]
value <- record[[field]]
label <- paste(field, value, sep = ":")
cat(label, "\n", sep = "")
  1. field_index ← 2

    1field_index <- 22record <- list(id = 101, score = 88, passed = TRUE)
    values this step2field_index
  2. record ← id=101, score=88, passed=TRUE

    1field_index <- 22record <- list(id = 101, score = 88, passed = TRUE)3field <- c("id", "score", "passed")[field_index]
    values this stepid=101, score=88, passed=TRUErecord
  3. field ← score

    2record <- list(id = 101, score = 88, passed = TRUE)3field <- c("id", "score", "passed")[field_index]4value <- record[[field]]
    values this stepscorefield2field_index
  4. value ← 88

    3field <- c("id", "score", "passed")[field_index]4value <- record[[field]]5label <- paste(field, value, sep = ":")
    values this step88valuescorefield3 fieldsrecord
  5. label ← score:88

    4value <- record[[field]]5label <- paste(field, value, sep = ":")6cat(label, "\n", sep = "")
    values this stepscore:88labelscorefield88value
  6. cat(label, " ", sep = "")

    5label <- paste(field, value, sep = ":")6cat(label, "\n", sep = "")
    outputscore:88
    values this stepscore:88label
  1. field_index ← 1

    1field_index <- 12record <- list(id = 101, score = 88, passed = TRUE)
    values this step1field_index
  2. record ← id=101, score=88, passed=TRUE

    1field_index <- 12record <- list(id = 101, score = 88, passed = TRUE)3field <- c("id", "score", "passed")[field_index]
    values this stepid=101, score=88, passed=TRUErecord
  3. field ← id

    2record <- list(id = 101, score = 88, passed = TRUE)3field <- c("id", "score", "passed")[field_index]4value <- record[[field]]
    values this stepidfield1field_index
  4. value ← 101

    3field <- c("id", "score", "passed")[field_index]4value <- record[[field]]5label <- paste(field, value, sep = ":")
    values this step101valueidfield3 fieldsrecord
  5. label ← id:101

    4value <- record[[field]]5label <- paste(field, value, sep = ":")6cat(label, "\n", sep = "")
    values this stepid:101labelidfield101value
  6. cat(label, " ", sep = "")

    5label <- paste(field, value, sep = ":")6cat(label, "\n", sep = "")
    outputid:101
    values this stepid:101label
  1. field_index ← 3

    1field_index <- 32record <- list(id = 101, score = 88, passed = TRUE)
    values this step3field_index
  2. record ← id=101, score=88, passed=TRUE

    1field_index <- 32record <- list(id = 101, score = 88, passed = TRUE)3field <- c("id", "score", "passed")[field_index]
    values this stepid=101, score=88, passed=TRUErecord
  3. field ← passed

    2record <- list(id = 101, score = 88, passed = TRUE)3field <- c("id", "score", "passed")[field_index]4value <- record[[field]]
    values this steppassedfield3field_index
  4. value ← TRUE

    3field <- c("id", "score", "passed")[field_index]4value <- record[[field]]5label <- paste(field, value, sep = ":")
    values this stepTRUEvaluepassedfield3 fieldsrecord
  5. label ← passed:TRUE

    4value <- record[[field]]5label <- paste(field, value, sep = ":")6cat(label, "\n", sep = "")
    values this steppassed:TRUElabelpassedfieldTRUEvalue
  6. cat(label, " ", sep = "")

    5label <- paste(field, value, sep = ":")6cat(label, "\n", sep = "")
    outputpassed:TRUE
    values this steppassed:TRUElabel
named list A list can hold values with different types under field names.
field lookup `record[[field]]` reads a field when the field name is stored in a variable.
record label Combining the field and value gives a compact record inspection result.