使用 gt 表 - R 绘制每行的直方图

Ale*_*xis 2 r ggplot2 dplyr purrr gt

我想创建一个 gt 表,在其中可以看到一些指标,例如观察次数、平均值和中位数,并且我想要一个带有直方图的列。对于这个问题,我将使用 iris 数据集。

我最近学会了如何使用以下代码将绘图放入小标题中:

library(dplyr)
library(tidyr)
library(purrr)
library(gt)
my_tibble <- iris %>%
  pivot_longer(-Species, 
               names_to = "Vars", 
               values_to = "Values") %>%
  group_by(Vars) %>%
  summarise(obs = n(),
            mean = round(mean(Values),2),
            median = round(median(Values),2), 
            plots = list(ggplot(cur_data(), aes(Values)) + geom_histogram()))
Run Code Online (Sandbox Code Playgroud)

现在我想使用绘图列来绘制每个变量的直方图,所以我尝试了以下方法:

my_tibble %>%
  mutate(ggplot = NA) %>%
  gt() %>%
  text_transform(
    locations = cells_body(vars(ggplot)),
    fn = function(x) {
      map(.$plots,ggplot_image)
    }
  )
Run Code Online (Sandbox Code Playgroud)

但它返回给我一个错误:

Error in body[[col]][stub_df$rownum_i %in% loc$rows] <- fn(body[[col]][stub_df$rownum_i %in%  : 
  replacement has length zero
Run Code Online (Sandbox Code Playgroud)

gt 表应该是这样的: 在此输入图像描述

任何帮助将不胜感激。

Ale*_*xis 5

在回顾了 @akrun 和 @TarJae 的优秀想法之后,我有了这个解决方案,它提供了所需的 gt 表:

plots <- iris %>% 
  pivot_longer(-Species, 
               names_to = "Vars", 
               values_to = "Values") %>%
  group_by(Vars) %>%
  nest() %>%
  mutate(plot = map(data, 
                    function(df) df %>% 
                      ggplot(aes(Values)) + 
                      geom_histogram())) %>%
  select(-data)

iris %>%
  pivot_longer(-Species, 
               names_to = "Vars", 
               values_to = "Values") %>%
  group_by(Vars) %>%
  summarise(obs = n(),
            mean = round(mean(Values),2),
            median = round(median(Values),2)) %>%
  mutate(ggplot = NA) %>%
  gt() %>%
  text_transform(
    locations = cells_body(vars(ggplot)),
    fn = function(x) {
      map(plots$plot, ggplot_image, height = px(100))
    }
  )
Run Code Online (Sandbox Code Playgroud)

这是表格: 在此输入图像描述

我必须在输出表之外创建绘图,这样我就可以在 gt 表中调用它。