2013-04-08 3 views
4

Я задал этот вопрос в группе 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") 
    ) 
) 
)) 
+0

Кажется, что работает для меня. Отметка галочки делает ссылку загрузки, и щелчок по ссылке загрузки создает и загружает файл .Rnw. Реактивное выражение 'sweaveSave' не выполняется, потому что ничего не вызывает его; реактивные выражения оцениваются лениво. Если вы хотите, чтобы он выполнялся, даже если ничего не называет, вам нужно сделать его наблюдателем или называть его наблюдателем. См. Http://rstudio.github.io/shiny/tutorial/#reactivity-overview для получения дополнительной информации о различии между реактивными выражениями и наблюдателями. –

+0

@JoeCheng Спасибо, Джо. Мои сообщения по-прежнему рассылаются спамом в группе Shiny Google, я не могу ответить! Вы говорите, что это работает для вас. Но где созданный файл? Для меня он не появляется нигде на жестком диске. В любом случае, я также хотел бы создать файл, не загрузив его. –

+0

@JoeCheng Спасибо! Он работает с функцией 'observ()'! –

ответ

1

Это сделать вашу жизнь проще с помощью shinyFiles пакета.

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