реактивный lapply для загрузки PDF в блестящей - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь экспортировать несколько ggplots, которые хранятся в списке в один PDF-файл. Почему-то я не могу заставить его работать ..

Мне кажется, проблема в том, что при генерации списка с использованием реактивного контента создается список, потому что когда я использую статический набор данных, все работает нормально. Не работает при использовании реактивного набора данных ..

Так что это работает:

PlotDataFilt1<-filter(readRDS(paste0(get_lookup_path(),"/PlotData.rds")),Instelling=="agb")



    plot_list <-lapply(as.list(unique(PlotDataFilt1$variabele)), function(x) {

        ggplot(PlotDataFilt1%>%filter(variabele==x),
             aes(x=jaar, y = waarde, group=Instelling ,colour=Instelling),tooltip = c("x","y","group")) +
        geom_point()+
        geom_line() +
        labs(x=NULL,y=NULL)+
        ggtitle(x)+
        theme(axis.text.x = element_text(angle = 45, hjust = 1, face="bold", size=8))+
        theme(legend.title=element_blank()) +
        theme(legend.position="bottom")  +
        scale_y_continuous(labels=function(n){format(n, scientific = FALSE)})
    })




    output$downloadPlot = downloadHandler(

      filename = 'graphs.pdf',
      content = function(file) {
        #print(plot_list()[[1]])
        pdf(file)

        arrangeGrob(
          for (i in 1: length(plot_list)) {
            print(plot_list[[i]]) },
                ncol =length(plot_list)
        )
        dev.off()
      }
    )

а это не так:

  plot_list <-  observe({

    plot_list <-lapply(as.list(unique(PlotDataFilt()$variabele)), function(x) {

        ggplot(PlotDataFilt()%>%filter(variabele==x),
             aes(x=jaar, y = waarde, group=Instelling ,colour=Instelling),tooltip = c("x","y","group")) +
        geom_point()+
        geom_line() +
        labs(x=NULL,y=NULL)+
        ggtitle(x)+
        theme(axis.text.x = element_text(angle = 45, hjust = 1, face="bold", size=8))+
        theme(legend.title=element_blank()) +
        theme(legend.position="bottom")  +
        scale_y_continuous(labels=function(n){format(n, scientific = FALSE)})
    })

    return(plot_list)
  })


    output$downloadPlot = downloadHandler(

      filename = 'graphs.pdf',
      content = function(file) {
        #print(plot_list()[[1]])
        pdf(file)

        arrangeGrob(
          for (i in 1: length(plot_list)) {
            print(plot_list[[i]]) },
                ncol =length(plot_list)
        )
        dev.off()
      }
    )

РЕДАКТИРОВАТЬ: хитрость заключается в том, чтобы поместить все в обработчик загрузки, см. Ниже:


output$downloadPlot = downloadHandler(
      filename = paste0("Plots_PaazPuk_", format(Sys.time(), "%Y%m%d_%H%M%S_"), ".pdf"),
      content = function(file) {

        plot_list <-lapply(as.list(unique(PlotDataFilt()$variabele)), function(x) {

          ggplot(PlotDataFilt()%>%filter(variabele==x),
                 aes(x=jaar, y = waarde, group=Instelling ,colour=Instelling),tooltip = c("x","y","group")) +
            geom_point()+
            geom_line() +
            labs(x=NULL,y=NULL)+
            ggtitle(x)+
            theme(axis.text.x = element_text(angle = 45, hjust = 1, face="bold", size=8))+
            theme(legend.title=element_blank()) +
            theme(legend.position="bottom")  +
            scale_y_continuous(labels=function(n){format(n, scientific = FALSE)})
        })


        pdf(file)

        arrangeGrob(
          for (i in 1: length(plot_list)) {
            print(plot_list[[i]]) },
                ncol =length(plot_list)
        )
        dev.off()
      }
    )
'''

...