R Shiny downloadHandler не работает внутри flexdashboard - PullRequest
1 голос
/ 09 января 2020

Я работаю в R Shiny Flexdashboard и включаю кнопку загрузки. Для распространения предметов на экране я бы хотел использовать splitLayout. Но проблема в том, что если я использую downloadButton внутри SplitLayout, downloadHandler вызывает очень странное поведение ... в RStudio он пытается сохранить (очевидно) пустой файл .Rmd. В браузере он пытается сохранить (очевидно) пустой файл .htm ...

Код с минимальным примером следующий:

splitLayout(cellWidths = c("30%", "70%"),
            wellPanel(  
              downloadButton("downloadData")
            ),
            dataTableOutput("OrigData")
)
output$downloadData<-downloadHandler(
 filename =  "OriginalData.csv" ,
    content = function(file) {

      write.csv(mtcars, file=file)
    },
  contentType="text/csv"
)
output$OrigData<-DT::renderDataTable(mtcars)

Я хотел бы понять, что происходит ...

По ссылке очевидно, что downloadHandler работает, только если поставить его сразу после кода кнопки загрузки (также только если последняя обернута в wellPanel) ... Но код работает хорошо, если изолирован только эта часть.

Другие части приложения по-прежнему представляют собой просто текст / разметку и заголовки столбцов и вкладок, потому что он находится в состоянии черновика ...

Что происходит, когда downloadHandler пытается сохранить файл .Rmd и / или html?

Ответы [ 2 ]

1 голос
/ 09 января 2020

Это сработало для меня:

---
title: "app"
output:
    flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
runtime: shiny
---

```{r}
library(flexdashboard)
library(shiny)
library(DT)

splitLayout(cellWidths = c("30%", "70%"),
            wellPanel(  
              downloadButton("downloadData")
            ),
            dataTableOutput("OrigData")
)
output$downloadData<-downloadHandler(
 filename =  "OriginalData.csv" ,
    content = function(file) {

      write.csv(mtcars, file=file)
    },
  contentType="text/csv"
)

output$OrigData <- renderDataTable(mtcars)
```
0 голосов
/ 09 января 2020

Я включил ответ, потому что пытался ответить на комментарии, и он исчез ... Я думаю, что я понял ответ, но это было бы интригующее поведение flexdashboard + downloadHandler ...

  • Как упомянул @Phil, изолированный код, который я разместил здесь, действительно работает, я попробовал сейчас (извините, что не делал этого раньше) ...
  • Я вернулся к своему исходному коду и изолировал соответствующий код (с помощью моего данные). Он также работает (он правильно загружает .csv)
  • Остальные коды были теоретически неуместны для проблемы ... в том числе только оставшийся код поддерживает работу обработчика загрузки ...

Проблема, кажется, заключается в названиях (столбцы, заголовки вкладок - .data-navmenu, .storyboard) ... Это не имеет особого смысла, это просто заголовки ... Но я изменил исходные заголовки (было несколько похожих заголовков) и это также решил проблему… приложение перестало пытаться сохранить .Rmd или .htm и начало включать загрузку .csv…

Я считаю, что downloadHandler () не работает, когда в заголовках столбцов / вкладок есть похожие flexdashboard ... это имеет смысл? Звучит немного странно, но ответ сработал ...

...