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")
)
)
))
它似乎適用於我:選中該複選框會使下載鏈接出現,然後單擊下載鏈接創建並下載.Rnw文件。 'sweaveSave'無效表達式不執行,因爲沒有任何東西調用它;反應式表達式被懶惰地評估。如果你想讓它執行即使沒有任何調用它,你需要改爲觀察者,或者用觀察者調用它。請參閱http://rstudio.github.io/shiny/tutorial/#reactivity-overview以獲取有關被動表達式和觀察者之間區別的更多信息。 – 2013-04-08 22:42:32
@JoeCheng謝謝Joe。我的郵件今天在Shiny Google羣組上仍然是垃圾郵件,我無法回覆! 你說這對你有用。但創建的文件在哪裏?對我而言,它不會出現在硬盤的任何地方。 無論如何,我也想創建一個文件,而無需下載它。 – 2013-04-09 07:30:44
@JoeCheng謝謝!它與'observe()'函數一起工作! – 2013-04-09 08:44:15