将列表列表转换为小标题

时间:2019-10-15 07:49:48

标签: r list tidyverse tibble

我已经读过this question,在我的情况下,ggplot中有tibble个字,我无法理解。

说我有

library(tidyverse)
f <- function(n) {
  p <- tibble(x = rnorm(30, n)) %>%
    ggplot(aes(x = x)) + geom_density()
  return(list(n = n, p = p))
}
m <- map(seq(10), f)

我想将m变成一个tibble,有十行两列,分别名为np。 我还希望我的代码在可能的情况下可以使用任意数量的列,任何类型的列。

as_tibble(transpose(m)) 给我

# A tibble: 10 x 2
   n         p     
   <list>    <list>
 1 <int [1]> <gg>  
 2 <int [1]> <gg>  
 3 <int [1]> <gg>  
 ...

每个单元格都是一个列表,其中包含一个元素。 我想将每个列表转换为标量。

我尝试过的事情:

  • 我已将map_int用于n列,但是如何处理p列?
  • unnest也适用于列n,但不适用于p
  • unlist列上的p相同(甚至与recursive = FALSE相同)。

1 个答案:

答案 0 :(得分:1)

这是一种可能性。 您修改函数,使其仅返回绘图。然后,您仅使用列n创建标题,并使用p创建列map

f2 <- function(n) {
  tibble(x = rnorm(30, n)) %>%
    ggplot(aes(x = x)) + geom_density()
}

tibble(n = 1:10,
       p = map(n, f2))

然后列n是一个整数。 p是一个列表,但这是最好的,因为小标题列不能包含ggggplot类型的对象,而只能包含这些对象的列表。

据我所知,唯一可能的列类型是:intdbldatedttmfactorlogicalcharacterlist