闪亮(R):将selectInput中的选择下载到本地机器

Shiny (R): Download selection in selectInput to local machine

我正在尝试创建一个闪亮的应用程序,用户可以在其中查看目录中的文件列表,select 其中一个文件,然后将其下载到他们的计算机上。我可能过于复杂了,但我似乎找不到解决方案。

ui.R

filenames <- list.files(path=".",pattern="\.txt")
shinyUI(navbarPage("Download page",
tabPanel("Download",
sidebarLayout(
sidebarPanel(
selectInput("filenames", "Select the file you want to download:", filenames), downloadButton('downloadData', 'Download')
),

mainPanel(
p("Preview of sheet."),
tableOutput('table')
)))))

server.R

library(shiny)

shinyServer(function(input, output) {

  datasetInput <- reactive({
    switch(input$filenames,
          filenames)
  })

  output$table <- renderTable({
    datasetInput()
  })

  output$downloadData <- downloadHandler(
    filename = function() { paste(input$dataset, '.csv', sep='') },
    content = function(file) {
      write.csv(datasetInput(), file)
    }
  )})

当我 运行 应用程序时,我可以查看目录中的文件列表,但下载功能不会导致下载 selected 文件。

假设您的工作目录中有一堆 'csv' 文件,下面的代码将列出并预览 'csv' 文件并将所选文件下载到您想要的目录。

ui.R

shinyUI(navbarPage("Download page",
tabPanel("Download",
sidebarLayout(
      sidebarPanel(
           selectInput("filenames", "Select the file you want to download:", list.files(pattern = '.csv')), 
           downloadButton('downloadData', 'Download')),
      mainPanel(
         p("Preview of sheet."),
      tableOutput('table')
)))))

server.R

library(shiny)

shinyServer(function(input, output) {

  datasetInput <- reactive({
    switch(input$filenames,
           filenames)
  })

  output$table <- renderTable({
    read.csv(input$filenames, header=TRUE)
  })


  output$downloadData <- downloadHandler(
    filename = function() {input$filenames},
    content = function(file) {write.csv(read.csv(input$filenames, header=TRUE),file)}
  )})