2014-03-28 81 views
1

我試圖應用this question節省情節給出的答案和this question下載無功輸出沒有成功。我不確定我的反應函數是否輸出了錯誤的數據類型,或者我的downloadHandler()寫入不正確。包含反應性對象在閃亮的出口

此外,鏈接的問題通過function() s到reactive()我被警告已被棄用,所以我在這裏避免它。 (該行爲並沒有改變,雖然)。

ui.R:

library(shiny) 

# Define UI for application 
shinyUI(pageWithSidebar(

    # Application title 
    headerPanel("App"), 

    sidebarPanel(
    downloadButton("savemap", label="Download Map (Hires)") 
), 

    mainPanel(
    tabsetPanel(
     tabPanel("Map", 
       plotOutput("myworld", height="650px",width="750px", 
          clickId="plotclick") 
    ) 
    ) 
) 
)) 

server.R

library(shiny) 
library(maps) 
library(mapdata) 
library(rworldmap) 
library(gridExtra) 

shinyServer(function(input, output) { 

    theworld <- reactive({ 
    myplot <- map("world2", wrap=TRUE, plot=TRUE, 
     resolution=2) 
    }) 

    output$myworld <- renderPlot({ 
    print(theworld()) 
    }) 

    output$savemap <- downloadHandler(
    filename = function() { 
     paste('fuzzymap-', Sys.Date(), '.png', sep="") 
    }, 
    content = function(file) { 
     # function to actually write the image file 
     # https://stackoverflow.com/questions/14810409/save-plots-made-in-a-shiny-app?rq=1 
     png(file) 
     print(theworld()) 
     dev.off() 
    }) 

}) 

中的活性功能的地圖在啓動時成功地繪製。下載提示生成並且一個png文件下載,但它不包含任何數據。此外,將返回以下非致命錯誤,但搜索結果顯示,沒有線索:

Error opening file: 2 
Error reading: 9 

回答

4

我覺得你無所適從map()回報。你稱它爲 繪製圖的副作用,而不是返回值。而不是使其成爲一個反應性值,只需將其保留爲匿名函數即可。

下面是一個簡化版本,爲我的作品:

library(shiny) 
library(maps) 

ui <- bootstrapPage(
    plotOutput("myworld", height = 450, width = 750), 
    downloadButton("savemap", "Download map") 
) 

theworld <- function() { 
    map("world2", wrap = TRUE, resolution = 2) 
} 

server <- function(input, output) { 
    output$myworld <- renderPlot({ 
    theworld() 
    }) 

    output$savemap <- downloadHandler(
    filename = function() { 
     paste0("fuzzymap-", Sys.Date(), ".png") 
    }, 
    content = function(file) { 
     png(file) 
     theworld() 
     dev.off() 
    } 
) 
} 

runApp(list(server = server, ui = ui)) 
+0

@haddley:我有在一個zip下載多個文件一些困難。你介意看看http://stackoverflow.com/questions/27067975/shiny-r-zip-multiple-pdfs-for-download/27068514#27068514 –