下载具有反应性数据表的处理程序(R Shiny)
Download Handler with reactive datatable (R Shiny)
我已经简化了很多我正在尝试构建的闪亮应用程序,但是,在这个想法中,我有两个功能:
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)
如您所见,我想将输出 table 下载到 csv 或 excel 文件...我让您尝试代码,然后尝试点击下载按钮,它不起作用...
调试
当我 运行 上述代码并尝试下载数据集时,我在 Console Pane within RStudio.
中收到以下警告和错误消息
Warning: Error in paste: object 'name' not found
Stack trace (innermost first):
1: runApp
Error : object 'name' not found
这让我检查了 paste()
function used within the filename
argument in shiny::downloadHandler()
。在您的代码中,您使用了对象 name
而没有为其赋值。
我在 downloadHandler()
的 filename
参数中用文本 "customTable" 替换了 name
。
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 post Shiny app: downloadHandler does not produce a file。
我已经简化了很多我正在尝试构建的闪亮应用程序,但是,在这个想法中,我有两个功能:
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)
如您所见,我想将输出 table 下载到 csv 或 excel 文件...我让您尝试代码,然后尝试点击下载按钮,它不起作用...
调试
当我 运行 上述代码并尝试下载数据集时,我在 Console Pane within RStudio.
中收到以下警告和错误消息Warning: Error in paste: object 'name' not found
Stack trace (innermost first):
1: runApp
Error : object 'name' not found
这让我检查了 paste()
function used within the filename
argument in shiny::downloadHandler()
。在您的代码中,您使用了对象 name
而没有为其赋值。
我在 downloadHandler()
的 filename
参数中用文本 "customTable" 替换了 name
。
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 post Shiny app: downloadHandler does not produce a file。