R Shiny - реактивные типы загрузки - PullRequest
0 голосов
/ 03 мая 2019

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

Вот упрощенная версия моего кода. Он хорошо работает за один прогон, но затем, если вы измените входные данные в верхней части приложения, он все равно будет загружен с исходным именем и форматом файла.

Я пробовал различные комбинации реактивов безрезультатно. Если вы попытаетесь сделать контент / имя файла и т. Д. Обработчиком загрузки вызовом реактивной функции, которая вызывает другие проблемы, например,

library(plyr)
library(tidyr)
library(dplyr)
library(xlsx)
library(zoo)
library(shiny)


df_1 <- data.frame(x = c(1:5))
df_2 <- data.frame(x = letters[1:5])


server <- function(input, output, session) {

### which process?

output$a <- renderUI ({

selectInput(inputId = "a")


})

processed_file <- reactive({

if(input$a == 'Donorfy') {

  a <- df_1

} else if(input$a == 'Sage') {

  a <- df_2
}

 a
 })


output$download <- downloadHandler(


filename     = ifelse(input$a == 'Donorfy', gsub('-', '_', 
paste0('Sage_upload_', Sys.Date(), '.csv')),
                      gsub('-', '_', paste0('Donorfy_upload_', Sys.Date(), '.xlsx'))),

content      = ifelse(input$a == 'Donorfy',
                      function(file) {write.csv(processed_file(),file,  row.names = FALSE, na = '')},
                      function(file) {write.xlsx(processed_file(),file,  
                                                 showNA = FALSE, row.names = FALSE, sheetName = 'Donations')}),


contentType  = ifelse(input$a == 'Donorfy','text/csv', 
                      'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')

)

}


ui <- fluidPage(

h3('Simplified example app of reactive Downloadhandler'),

hr(),

fluidRow(

# Select Year
column(4, selectInput('a',label = "Which system are you moving data FROM?",
                      choices = c('','Donorfy', 'Sage'),
                      selected = '')),

column(4, selectInput('b',label = "Which system are you moving data TO?",
                      choices = c('','Donorfy', 'Sage'),
                      selected = ''))


),

fluidRow(

column(12,align="center", downloadButton(outputId = 'download', label = 'Convert and Download Files')) 

))



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