purrr:多个列表的逐元素长度比较?

purrr: element-wise length comparison of multiple lists?

我有三个列表,每个列表有 2 个元素。如何检查每个列表中的每个元素是否具有相同的长度?最好使用 purrr。谢谢!

list.a = list(a = 1, b = c(1, 2))
list.b = list(a = 2, b = c(1, 2))
list.c = list(a = 3, b = c(1, 2, 3))

应该return T, T, F.

对于任意两个列表:

all(lengths(list.a)==lengths(list.b))

检查所有列表是否相等:

same_length <- function (x, y) all(lengths(x) == lengths(y))
Reduce(f, list(list.a, list.b, list.c))

如果你想使用purrr:

same_length <- function (x, y) all(lengths(x) == lengths(y))
purrr::reduce(list(list.a, list.b, list.c), f)

每个列表中的每个元素都具有相同的长度? - 这将是单个 TRUEFALSE。根据您的预期输出和任务,我认为您想比较列表元素的特定长度。

master_list <- list(list.a, list.b, list.c)
map_lgl(master_list, ~ all(lengths(.x) == 1:2))
[1]  TRUE  TRUE FALSE

不完全确定要求,但这里有 2 个可能有用的片段。

map_lgl(transpose(list(list.a, list.b, list.c)), ~ var(lengths(.x))==0)

  a     b 
 TRUE FALSE 

或者对于更通用的输出,您可以更轻松地操作

map_dfr(list(list.a, list.b, list.c), ~map(.x, length))

      a     b
1     1     2
2     1     2
3     1     3