Advanced Data Structures
Named List Record
Select a Field
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.
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 = "")
field_index ← 2
1field_index <- 22record <- list(id = 101, score = 88, passed = TRUE)values this step2field_indexrecord ← 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=TRUErecordfield ← score
2record <- list(id = 101, score = 88, passed = TRUE)3field <- c("id", "score", "passed")[field_index]4value <- record[[field]]values this stepscorefield2field_indexvalue ← 88
3field <- c("id", "score", "passed")[field_index]4value <- record[[field]]5label <- paste(field, value, sep = ":")values this step88valuescorefield3 fieldsrecordlabel ← score:88
4value <- record[[field]]5label <- paste(field, value, sep = ":")6cat(label, "\n", sep = "")values this stepscore:88labelscorefield88valuecat(label, " ", sep = "")
5label <- paste(field, value, sep = ":")6cat(label, "\n", sep = "")outputscore:88values this stepscore:88label
field_index ← 1
1field_index <- 12record <- list(id = 101, score = 88, passed = TRUE)values this step1field_indexrecord ← 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=TRUErecordfield ← id
2record <- list(id = 101, score = 88, passed = TRUE)3field <- c("id", "score", "passed")[field_index]4value <- record[[field]]values this stepidfield1field_indexvalue ← 101
3field <- c("id", "score", "passed")[field_index]4value <- record[[field]]5label <- paste(field, value, sep = ":")values this step101valueidfield3 fieldsrecordlabel ← id:101
4value <- record[[field]]5label <- paste(field, value, sep = ":")6cat(label, "\n", sep = "")values this stepid:101labelidfield101valuecat(label, " ", sep = "")
5label <- paste(field, value, sep = ":")6cat(label, "\n", sep = "")outputid:101values this stepid:101label
field_index ← 3
1field_index <- 32record <- list(id = 101, score = 88, passed = TRUE)values this step3field_indexrecord ← 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=TRUErecordfield ← passed
2record <- list(id = 101, score = 88, passed = TRUE)3field <- c("id", "score", "passed")[field_index]4value <- record[[field]]values this steppassedfield3field_indexvalue ← TRUE
3field <- c("id", "score", "passed")[field_index]4value <- record[[field]]5label <- paste(field, value, sep = ":")values this stepTRUEvaluepassedfield3 fieldsrecordlabel ← passed:TRUE
4value <- record[[field]]5label <- paste(field, value, sep = ":")6cat(label, "\n", sep = "")values this steppassed:TRUElabelpassedfieldTRUEvaluecat(label, " ", sep = "")
5label <- paste(field, value, sep = ":")6cat(label, "\n", sep = "")outputpassed:TRUEvalues 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.