首页 > 解决方案 > 取消嵌套命名列表列时保留名称

问题描述

这是我的代表:

make_named_list <- function(x) {
  list(apple = 1, banana = 2, carrot = 3)
}

tibble(x = 1:3, y = 2:4) %>% 
  mutate(z = map(x, make_named_list)) %>% 
  unnest() %>% 
  pull(z)

输出是一个没有任何名称的列表,但我想输出一个命名列表。我在这里查看了一个相关问题,但我不确定该解决方案是否适用于我的(更简单的?)场景。

需要明确的是,所需的输出是:

list(apple = 1, banana = 2, carrot = 3, 
     apple = 1, carrot = 2, banana = 3, 
     apple = 1, banana = 2, carrot = 3)

标签: rdplyrtidyversepurrr

解决方案


看起来我们只需要rep

rep(make_named_list(3), 3)
#$apple
#[1] 1

#$banana
#[1] 2

#$carrot
#[1] 3

#$apple
#[1] 1

#$banana
#[1] 2

#$carrot
#[1] 3

#$apple
#[1] 1

#$banana
#[1] 2

#$carrot
#[1] 3

或者如果我们正在使用tidyverse,那么使用flatten

tibble(x = 1:3, y = 2:4) %>% 
    transmute(z = map(x, make_named_list)) %>% 
    pull(z) %>% 
    flatten
#$apple
#[1] 1

#$banana
#[1] 2

#$carrot
#[1] 3

#$apple
#[1] 1

#$banana
#[1] 2

#$carrot
#[1] 3

#$apple
#[1] 1

#$banana
#[1] 2

#$carrot
#[1] 3

推荐阅读