在尝试实现一个有光泽的应用程序的简单downloadButton的几个问题之后,我只是尝试实现了我发现的一个testplo。
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("ngear", "Select the gear number", c("1"="cyl","2"="am","3"="gear"))
),
mainPanel(
plotOutput("plot"),
downloadButton("report","download"))
)
)
server <- function(input, output) {
mtreact <- reactive({
mtcars[,c("mpg",input$ngear)]
})
output$plot <- renderPlot({
with(mtreact(),boxplot(mpg~mtreact()[,2]))
})
output$report <- downloadHandler(
filename = function(){
paste("plot","png",sep=".")
},
content = function(){
png(file)
with(mtreact(),boxplot(mpg~mtreact()[,2]))
dev.off
}
)
}
# Run the application
shinyApp(ui = ui, server = server)
当我运行此代码时,闪亮的应用程序将正常运行。但是,当我单击“下载”按钮时,会打开一个窗口,以保存名为“ report”的文件,不带扩展名,不包含不包含预期的图形。
这是我第一次尝试此功能。然后,有人在代码上看到任何错误吗?
答案 0 :(得分:0)
您的downloadHandler应该在content
上接受文件名
output$report <- downloadHandler(
filename = function(){
paste("plot","png",sep=".")
},
content = function(file){
^^^^
png(file)
with(mtreact(),boxplot(mpg~mtreact()[,2]))
dev.off
}
)
第二,filename
函数返回一个建议,该建议用于下载对话框。但是,这在RStudio的应用查看器中无法正确执行(当您在RStudio中单击“运行应用”时会出现该视图)。尝试在适当的浏览器(例如Chrome)中运行该应用,以检查其是否正确响应。
答案 1 :(得分:0)
正如MrGumble和MrFlick指出的那样,代码包含两个错误:function( file )和dev.of **()**
以下代码按预期生成报告。
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("ngear", "Select the gear number", c("1"="cyl","2"="am","3"="gear"))
),
mainPanel(
plotOutput("plot"),
downloadButton("report","download"))
)
)
server <- function(input, output) {
mtreact <- reactive({
mtcars[,c("mpg",input$ngear)]
})
output$plot <- renderPlot({
with(mtreact(),boxplot(mpg~mtreact()[,2]))
})
output$report <- downloadHandler(
filename = function(){
paste("plot","png",sep=".")
},
content = function(file){
png(file)
with(mtreact(),boxplot(mpg~mtreact()[,2]))
dev.off()
}
)
}
感谢MrFlick和MrGumble的帮助。