我已经读过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
,有十行两列,分别名为n
和p
。
我还希望我的代码在可能的情况下可以使用任意数量的列,任何类型的列。
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
相同)。答案 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
是一个列表,但这是最好的,因为小标题列不能包含gg
或ggplot
类型的对象,而只能包含这些对象的列表。
据我所知,唯一可能的列类型是:int
,dbl
,date
,dttm
,factor
,logical
,character
和list
。