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)

Arguments

list1

a list.

list2

a list.

Value

the and'ed list.

Details

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).

See also

special_or_lists

Examples

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)) )) })