Сохранение временных файлов на сервере R Shiny

#r #shiny

Вопрос:

Я пытался решить проблему при разработке одного из моих первых приложений R Shiny. Мое приложение работает на моем ноутбуке, но я не могу заставить его работать, когда загружаю его на блестящий сервер. Я хочу, чтобы приложение создало временный файл диаграммы рассеяния, plotOut, на сервере, который затем экспортируется в файл Excel либо при нажатии кнопки «Загрузить диаграмму рассеяния», либо автоматически. Я публикую свою лучшую попытку репрекса ниже. Я считаю, что мне нужно каким-то образом использовать tempdir (), но не уверен, как это сделать. Заранее спасибо 😀

«ui.R»

 library(tidyverse)  library(openxlsx)     ui lt;- fluidPage(   fluidRow("This is a simplified app to reproduce the difficulties in saving and downloading files on the Shiny server",  plotOutput("plot", height = 350),  downloadButton('downloadPlot1', "Download ScatterPlot"),  downloadButton(  'dl_excel',  'Download Results (.xlsx)'  )  ) )  

«сервер.R»

 server lt;- function(input, output){  ###create basic plot in ggplot  plotOut lt;- reactive(  ggplot(mtcars, aes(x=wt, y=mpg))   geom_point()  )    ###display plot  output$plot lt;- renderPlot({  plotOut()  })   #temp = tempdir() #tried using this in filename to no avail   fName = paste0('plotOut', Sys.Date(), '.png')   ##save plot file as png  output$downloadPlot1 lt;- downloadHandler(  filename = function(){fName},  content = function(file){  ggsave(file,plot=plotOut())  })   ##format excel file for output  output$dl_excel lt;- downloadHandler(  filename = function(){  paste0('results_', Sys.Date(), '.xlsx')  },  content = function(file){  my_workbook lt;- createWorkbook()  addWorksheet(  wb = my_workbook,  sheetName = "Sheet1"  )   insertImage(my_workbook, sheet = 1,  file = fName  , width = 4, height = 4, startRow = 1, startCol = 1, units = "in", dpi = 300  )  saveWorkbook(my_workbook, file)  }  ) }  

Ответ №1:

Кто-то на другом форуме помог мне решить эту проблему. Обновление кода до следующего устраняет проблему.

 output$dl_excel lt;-  downloadHandler(  filename = function() {  paste0('results_', Sys.Date(), '.xlsx')  },   content = function(file) {  **tempPNG lt;- tempfile(fileext = ".png") #create a tempfile to print the plot to  ggsave(tempPNG, plot = plotOut()) #print the plot to the tempfile**   my_workbook lt;-  createWorkbook()  addWorksheet(wb = my_workbook,  sheetName = "Sheet1")  insertImage(  my_workbook,  sheet = 1,  **file = tempPNG, #use the tempfile**   width = 4,  height = 4,  startRow = 1,  startCol = 1,  units = "in",  dpi = 300  )   saveWorkbook(my_workbook, file)  }  )