2013-04-08 34 views
4

我在Shiny Google小組上提出過這個問題,但一旦發佈,它立即被刪除,我不知道爲什麼。如何保存(不上傳)從Shiny界面創建的文件?

所以我在這裏問這個問題。

我知道如何上傳從Shiny應用程序創建的文件,但我沒有成功花費幾個小時來找到如何將文件保存在硬盤上。請你能告訴我一個辦法嗎?例如,我想保存使用sink()或RData文件創建的文件。

下面是我多次嘗試之一的一個(人造)例子。 sweaveSave()函數不起作用。請不要關注劇情,它不會影響我的問題。

server.R

library(shiny) 
## 
## function creating a Sweave report 
## 
createReport <- function(file){ 
     sink(file) 
     cat(
"\\documentclass{article}\n 
\\begin{document}\n 
\\SweaveOpts{concordance=TRUE} 
This is the Rnw file.\n 
<<fig=TRUE>>= 
plot(0,0) 
@\n 
\\end{document}\n") 
     sink() 
} 

## 
## Shiny server 
## 
shinyServer(function(input, output) { 
    ## 
    ## Create plot 
    ## 
    createPlot <- reactive({ 
     # generate an rnorm distribution and plot it 
     titl <- paste0("Exponential distribution with rate ", round(input$parameter,2)) 
    curve(dexp(x,rate=input$parameter), from=0, to=5, main=titl, ylab=NA, xlab=NA) 
     }) 
    ## 
    ## output : plot 
    ## 
    output$distPlot <- renderPlot({ 
     createPlot() 
    }) 
    ## 
    ## output : download Sweave file 
    ## 
    output$sweavedownload <- downloadHandler(
     filename="report00.Rnw", 
     content = createReport 
    ) 
    ## 
    ## save Sweave file 
    ## 
    sweaveSave <- reactive({ 
     if(input$save){ 
       createReport("REPORT00.Rnw") 
     }else{NULL} 
    }) 
}) 

ui.R

library(shiny) 
shinyUI(pageWithSidebar(

    # Application title 
    headerPanel("Hello Shiny!"), 

    # Sidebar panel 
    sidebarPanel(
    sliderInput("parameter", 
       "Rate parameter:", 
       min = 0.0000000001, 
       max = 10, 
       value = 5), 
    checkboxInput("save", "Check to save and download") 
), 

    # Main panel 
    mainPanel(
    plotOutput("distPlot"), 
    conditionalPanel(
     condition = "input.save", 
     downloadLink("sweavedownload", "Download") 
    ) 
) 
)) 
+0

它似乎適用於我:選中該複選框會使下載鏈接出現,然後單擊下載鏈接創建並下載.Rnw文件。 'sweaveSave'無效表達式不執行,因爲沒有任何東西調用它;反應式表達式被懶惰地評估。如果你想讓它執行即使沒有任何調用它,你需要改爲觀察者,或者用觀察者調用它。請參閱http://rstudio.github.io/shiny/tutorial/#reactivity-overview以獲取有關被動表達式和觀察者之間區別的更多信息。 – 2013-04-08 22:42:32

+0

@JoeCheng謝謝Joe。我的郵件今天在Shiny Google羣組上仍然是垃圾郵件,我無法回覆! 你說這對你有用。但創建的文件在哪裏?對我而言,它不會出現在硬盤的任何地方。 無論如何,我也想創建一個文件,而無需下載它。 – 2013-04-09 07:30:44

+0

@JoeCheng謝謝!它與'observe()'函數一起工作! – 2013-04-09 08:44:15

回答

1

它使您的生活使用shinyFiles包容易。

install.package('shinyFiles') 
require(shinyFiles) 
shinyFilesExample()