df %>% mutate( type = map_chr(x, typeof), length = map_int(x, length) ) #> # A tibble: 3 × 3 #> x type length #>
这与默认的 tbl 打印方法所提供的基本信息相同,但现在你可以用它来进行筛选。如果你有一个异构列表,并且想过滤掉不适合你的部分,这是一种有用的技巧。
别忘了 map_*() 快捷方式——你可以使用 map_chr(x, "apple") 来提取 x 中每个元素存储在 apple 中的字符串。这对于将嵌套列表拆分为常规列非常有用。使用 .null 参数可以提供一个值,以便在元素缺失时使用(而不是返回 NULL):
df <- tribble( ~x, list(a = 1, b = 2), list(a = 2, c = 4) ) df %>% mutate( a = map_dbl(x, "a"), b = map_dbl(x, "b", .null = NA_real_) ) #> # A tibble: 2 × 3 #> x a b #>
展开嵌套
unnest() 的工作原理是:对于列表列中的每个元素,将常规列重复一次。例如,在下面这个非常简单的例子中,我们将第一行重复四次(因为 y 的第一个元素长度为四),第二行重复一次:
tibble(x = 1:2, y = list(1:4, 1)) %>% unnest(y) #> # A tibble: 5 × 2 #> x y #>