下载带有反应数据表的处理程序(R Shiny)

时间:2018-02-19 16:02:57

标签: r dataframe download shiny shiny-server

我已经简化了很多我想要构建的闪亮应用程序,但是,在这个想法中,我有两个功能:

choose_input <- function(n1,n2,n3){
x1 <<- n1+n2
x2 <<- n2+n3
x3 <<- (n1*n2)/n3
}

createmydata <- function(n){
 c1 <- c(1:n)
 c2 <- c1+(x2*x3)
 c3 <- c2+x1

 df <- data.frame("column1"=c1,"column2"=c2,"column3"=c3)

 return(df)
}

你会告诉我,我只能用这两个函数做一个函数,因为它们非常简单,但在我的应用程序中有很多行,我必须把它们分开。无论如何,这是我的模拟代码:

ui <- fluidPage(
 numericInput("n1",label="Choose the first parameter",min=0,max=100,value=3),
 numericInput("n2",label="Choose the second parameter",min=0,max=100,value=4),
 numericInput("n3",label="Choose the third parameter",min=0,max=100,value=5),
 numericInput("n",label="Choose dataframe length",min=1,max=10000,value=100),
radioButtons("filetype", "File type:",
           choices = c("csv", "tsv")),
downloadButton('downloadData', 'Download'),
tableOutput("data")
)

server <- function(input,output){
  RE <- reactive({
  choose_input(input$n1,input$n2,input$n3)
  createmydata(input$n)
   })

 output$data <- renderTable({
RE()
 })

output$downloadData <- downloadHandler(

filename = function() {
  paste(name, input$filetype, sep = ".")
},

content = function(file) {
  sep <- switch(input$filetype, "csv" = ",", "tsv" = "\t")

  write.table(RE(), file, sep = sep,
              row.names = FALSE)
}
)

}

 shinyApp(ui = ui, server=server)

正如您所看到的,我想将输出表下载到csv或excel文件中...我让您尝试代码,然后尝试单击下载按钮,它不起作用... < / p>

1 个答案:

答案 0 :(得分:1)

调试

当我运行上面的代码并尝试下载数据集时,我在Console Pane within RStudio中收到以下警告和错误消息。

Warning: Error in paste: object 'name' not found
Stack trace (innermost first):
    1: runApp
Error : object 'name' not found

这使我检查了paste()filename参数中使用的shiny::downloadHandler()函数。在您的代码中,您使用对象name而无需为其赋值。

我将name替换为filenamedownloadHandler()参数内的文字“customTable”。

output$downloadData <- downloadHandler(

    filename = function() {
      paste( "customTable", input$filetype, sep = ".")
    },

    content = function(file) {
      sep <- switch(input$filetype, "csv" = ",", "tsv" = "\t")

      write.table(RE(), file, sep = sep,
                  row.names = FALSE)
    }
  )

在浏览器中下载数据

运行app.R脚本后,我点击Open in Browser按钮,在Chrome上的新标签页中查看Shiny应用。在那里,我成功地能够在点击download按钮后下载.csv和.tsv文件。

注意:我正在寻找更好的理由来解释为什么需要采取此行动,但就目前而言,我发现了相关的SO帖Shiny app: downloadHandler does not produce a file