Plot dinâmico em shiny

Olá. Como estão?
Tenho como output de uma shiny um objeto ggpolot2, que é junção ‘n’ plots, mas esse ‘n’ varia em função do dataset, ou seja, eu não consigo prever a priori qual var ser o numero total de plots a juntar.

Pensava para isso usar o pacote patchwork, mas aparentemente preciso ter ‘harcodeado’ os objetos dos plots a juntar. Hoje esses plots ficam em um objeto do tipo list, com número de niveis variados, mas o patchwork não funciona com essa lista. Veja exemplo abaixo.

Alguma sugestão de como poderia fazer? Usar o facet_...() para de entrada gerar um unico plot não é uma opção no meu caso.

library(patchwork)
library(ggplot2)

p1 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp)) + 
  ggtitle('Plot 1')

p2 <- ggplot(mtcars) + 
  geom_boxplot(aes(gear, disp, group = gear)) + 
  ggtitle('Plot 2')

p3 <- ggplot(mtcars) + 
  geom_point(aes(hp, wt, colour = mpg)) + 
  ggtitle('Plot 3')

p4 <- ggplot(mtcars) + 
  geom_bar(aes(gear)) + 
  facet_wrap(~cyl) + 
  ggtitle('Plot 4')

p1 + p2 + p3 + p4 + plot_layout(ncol = 2) # funciona

p_list = list(p1, p2, p3, p4) 
p_list + plot_layout(ncol = 2) #nao funciona
#> Error in p_list + plot_layout(ncol = 2): non-numeric argument to binary operator

Created on 2023-09-08 with reprex v2.0.2

1 curtida