Как я могу скачать объект с блеска? - PullRequest
0 голосов
/ 10 января 2019

После нескольких проблем, пытаясь реализовать простую кнопку загрузки блестящего приложения, я просто попытался реализовать обнаруженный пример.

источник: https://www.youtube.com/watch?v=Y5arqZ9Bp0A

library(shiny)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectInput("ngear", "Select the gear number", c("1"="cyl","2"="am","3"="gear"))
    ),
    mainPanel(
      plotOutput("plot"),
      downloadButton("report","download"))
  )
)

server <- function(input, output) {
   mtreact <- reactive({
     mtcars[,c("mpg",input$ngear)]
   })

   output$plot <- renderPlot({
      with(mtreact(),boxplot(mpg~mtreact()[,2]))
   })

   output$report <- downloadHandler(
     filename = function(){
       paste("plot","png",sep=".")
     },
     content = function(){
       png(file)
       with(mtreact(),boxplot(mpg~mtreact()[,2]))
       dev.off
     }
   )
}

# Run the application 
shinyApp(ui = ui, server = server)

Когда я запускаю этот код, блестящее приложение работает правильно. Однако, когда я нажимаю на кнопку загрузки, открывается окно для сохранения файла с именем «report» без расширения, и он не содержит графика, как ожидалось.

Впервые я пробую эту функцию. Тогда кто-нибудь увидит ошибку в коде?

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Как отметили MrGumble и MrFlick, в коде есть две ошибки: function ( file ) и dev.of ** () **

Следующий код генерирует отчет, как и ожидалось.

library(shiny)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectInput("ngear", "Select the gear number", c("1"="cyl","2"="am","3"="gear"))
    ),
    mainPanel(
      plotOutput("plot"),
      downloadButton("report","download"))
  )
)

server <- function(input, output) {
   mtreact <- reactive({
     mtcars[,c("mpg",input$ngear)]
   })

   output$plot <- renderPlot({
      with(mtreact(),boxplot(mpg~mtreact()[,2]))
   })

   output$report <- downloadHandler(
     filename = function(){
       paste("plot","png",sep=".")
     },
     content = function(file){
       png(file)
       with(mtreact(),boxplot(mpg~mtreact()[,2]))
       dev.off()
     }
   )
}

Спасибо MrFlick и MrGumble за помощь.

0 голосов
/ 11 января 2019

Ваш downloadHandler должен принять имя файла на content

   output$report <- downloadHandler(
     filename = function(){
       paste("plot","png",sep=".")
     },
     content = function(file){
                        ^^^^
       png(file)
       with(mtreact(),boxplot(mpg~mtreact()[,2]))
       dev.off
     }
   )

Во-вторых, функция filename возвращает предложение, которое используется для диалогового окна загрузки. Это, однако, не выполняется должным образом в программе просмотра приложений RStudio (той, которая появляется, когда вы нажимаете «Запустить приложение» в RStudio). Попробуйте запустить приложение в соответствующем браузере, таком как Chrome, чтобы убедиться, что оно правильно реагирует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...