Я задал этот вопрос в группе Shiny Google, но после его публикации он сразу же удаляется, я не знаю почему.Как сохранить (не загружать) файл, созданный с помощью интерфейса 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 для получения дополнительной информации о различии между реактивными выражениями и наблюдателями. –
@JoeCheng Спасибо, Джо. Мои сообщения по-прежнему рассылаются спамом в группе Shiny Google, я не могу ответить! Вы говорите, что это работает для вас. Но где созданный файл? Для меня он не появляется нигде на жестком диске. В любом случае, я также хотел бы создать файл, не загрузив его. –
@JoeCheng Спасибо! Он работает с функцией 'observ()'! –