
Create a List With Unique Keys (Named or Unnamed)
klist.RdCreate a named/unnamed list with unique keys, erroring if any duplicate keys (names) are found.
Arguments
- ...
for
klist: objects, possibly named, foras.klist: passed to other methods.- x
object to be coerced or tested.
- .recursive
boolean indicating whether to recursively validate nested lists. If
TRUEthen all nested lists will be validated and converted to klists, ifFALSEthen only the top level list will be validated and converted to a klist.- value
a character vector of up to the same length as x, or NULL. Resulting names must be unique.
Details
names<- method for klist objects will apply the names and then validate
that the resulting names are unique.
c.klist method will combine the objects and then validate that the
resulting klist's names are unique.
For a list with unique keys of all names, see knlist.
Examples
klist(a = 1, 2, b = 3)
#> $a
#> [1] 1
#>
#> [[2]]
#> [1] 2
#>
#> $b
#> [1] 3
#>
try(klist(1, a = 2, a = 1)) # duplicate keys not allowed
#> Error in klist(1, a = 2, a = 1) : Names must be unique.
#> Duplicate name: a
# objects within a klist are not subject to validation
klist(1, list(a = 1, a = 2))
#> [[1]]
#> [1] 1
#>
#> [[2]]
#> [[2]]$a
#> [1] 1
#>
#> [[2]]$a
#> [1] 2
#>
#>
try(klist(1, klist(a = 1, a = 2))) # but nested klists are
#> Error in klist(a = 1, a = 2) : Names must be unique.
#> Duplicate name: a
# recursively validate and convert to klist
x <- list(1, list(1, 2))
x <- as.klist(x, .recursive = TRUE)
class(x[[2]]) # nested list is now a klist
#> [1] "klist"
is.klist(klist(1)) # TRUE
#> [1] TRUE
try(names(x) <- c("a", "a")) # names are validated when changed
#> Error in `names<-.klist`(`*tmp*`, value = c("a", "a")) :
#> Names must be unique.
#> Duplicate name: a
# c() method for klist objects also validates
try(c(klist(a = 1), list(a = 3)))
#> Error in c.klist(klist(a = 1), list(a = 3)) : Names must be unique.
#> Duplicate name: a