Конвертировать список в виде таблицы - PullRequest
1 голос
/ 15 октября 2019

Я прочитал этот вопрос , и я не могу понять его в моем случае, где у меня есть ggplot s в моем 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 (даже с * 1039)*).

1 Ответ

1 голос
/ 15 октября 2019

Вот одна возможность. Вы модифицируете функцию так, что она возвращает только график. Затем вы создаете тиббл только с столбцом 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.

...