The structure of the lists should be the same. That is,
as a tree, the two lists should be isomorphic. For example,
special_and_lists(list(a = FALSE, b = list(b = TRUE, c = FALSE)),
list(a = FALSE, b = list(b = FALSE, c = TRUE)))
yields
list(a = FALSE, b = list(b = FALSE, c = TRUE))
and
special_and_lists(list(a = FALSE, b = list(b = TRUE, c = FALSE)),
list(a = list(b = FALSE, c = TRUE), b = FALSE))
yields
list(a = list(b = FALSE, c = TRUE), b = list(b = TRUE, c = FALSE))
special_and_lists(list1, list2)
list1 | a list. |
---|---|
list2 | a list. |
the and'ed list.
Note that lists get ANDed based on *order*, not on key names (as this could
be ambiguous), so make sure the two lists have the same comparable key orders.
For example, special_and_lists(list(a = TRUE, b = FALSE), list(b = FALSE, a = TRUE))
would mistakenly return list(a = TRUE, b = TRUE)
.
not_run({ stopifnot(identical( special_and_lists(list(a = FALSE, b = list(b = TRUE, c = FALSE)), list(a = FALSE, b = list(b = FALSE, c = TRUE))), list(a = FALSE, b = list(b = FALSE, c = TRUE)) )) stopifnot(identical( special_and_lists(list(a = FALSE, b = list(b = TRUE, c = FALSE)), list(a = list(b = FALSE, c = TRUE), b = FALSE)), list(a = list(b = FALSE, c = TRUE), b = list(b = TRUE, c = FALSE)) )) })