Debugging and Inspection
Structure Summary
Inspect a Field Type
Inspection starts by checking what kind of value a record field contains.
Program
Play the script to choose a field and inspect its simple type label.
structure_summary.R
Replay: real traced execution (multi-file project)
item_index <- 2
record <- list(count = 3, label = "ready", active = TRUE)
field <- names(record)[item_index]
kind <- class(record[[field]])[1]
label <- paste(field, kind, sep = ":")
cat(label, "\n", sep = "")
item_index <- 1
record <- list(count = 3, label = "ready", active = TRUE)
field <- names(record)[item_index]
kind <- class(record[[field]])[1]
label <- paste(field, kind, sep = ":")
cat(label, "\n", sep = "")
item_index <- 3
record <- list(count = 3, label = "ready", active = TRUE)
field <- names(record)[item_index]
kind <- class(record[[field]])[1]
label <- paste(field, kind, sep = ":")
cat(label, "\n", sep = "")
item_index ← 2
1item_index <- 22record <- list(count = 3, label = "ready", active = TRUE)values this step2item_indexrecord ← count=3, label=ready, active=TRUE
1item_index <- 22record <- list(count = 3, label = "ready", active = TRUE)3field <- names(record)[item_index]values this stepcount=3, label=ready, active=TRUErecordfield ← label
2record <- list(count = 3, label = "ready", active = TRUE)3field <- names(record)[item_index]4kind <- class(record[[field]])[1]values this steplabelfield2item_indexkind ← character
3field <- names(record)[item_index]4kind <- class(record[[field]])[1]5label <- paste(field, kind, sep = ":")values this stepcharacterkindlabelfieldlabel ← label:character
4kind <- class(record[[field]])[1]5label <- paste(field, kind, sep = ":")6cat(label, "\n", sep = "")values this steplabel:characterlabellabelfieldcharacterkindcat(label, " ", sep = "")
5label <- paste(field, kind, sep = ":")6cat(label, "\n", sep = "")outputlabel:charactervalues this steplabel:characterlabel
item_index ← 1
1item_index <- 12record <- list(count = 3, label = "ready", active = TRUE)values this step1item_indexrecord ← count=3, label=ready, active=TRUE
1item_index <- 12record <- list(count = 3, label = "ready", active = TRUE)3field <- names(record)[item_index]values this stepcount=3, label=ready, active=TRUErecordfield ← count
2record <- list(count = 3, label = "ready", active = TRUE)3field <- names(record)[item_index]4kind <- class(record[[field]])[1]values this stepcountfield1item_indexkind ← numeric
3field <- names(record)[item_index]4kind <- class(record[[field]])[1]5label <- paste(field, kind, sep = ":")values this stepnumerickindcountfieldlabel ← count:numeric
4kind <- class(record[[field]])[1]5label <- paste(field, kind, sep = ":")6cat(label, "\n", sep = "")values this stepcount:numericlabelcountfieldnumerickindcat(label, " ", sep = "")
5label <- paste(field, kind, sep = ":")6cat(label, "\n", sep = "")outputcount:numericvalues this stepcount:numericlabel
item_index ← 3
1item_index <- 32record <- list(count = 3, label = "ready", active = TRUE)values this step3item_indexrecord ← count=3, label=ready, active=TRUE
1item_index <- 32record <- list(count = 3, label = "ready", active = TRUE)3field <- names(record)[item_index]values this stepcount=3, label=ready, active=TRUErecordfield ← active
2record <- list(count = 3, label = "ready", active = TRUE)3field <- names(record)[item_index]4kind <- class(record[[field]])[1]values this stepactivefield3item_indexkind ← logical
3field <- names(record)[item_index]4kind <- class(record[[field]])[1]5label <- paste(field, kind, sep = ":")values this steplogicalkindactivefieldlabel ← active:logical
4kind <- class(record[[field]])[1]5label <- paste(field, kind, sep = ":")6cat(label, "\n", sep = "")values this stepactive:logicallabelactivefieldlogicalkindcat(label, " ", sep = "")
5label <- paste(field, kind, sep = ":")6cat(label, "\n", sep = "")outputactive:logicalvalues this stepactive:logicallabel
record
A small named list gives the inspection target.
field name
`names(record)[item_index]` chooses which field to inspect.
type label
`class(record[[field]])[1]` reports a compact type name.