2

我有一个闪亮的应用程序来生成.txt要下载的文件。此外,我想保留用户在我的闪亮服务器中生成的文件的副本。服务器功能如下所示:

server <- function(input, output, session){

data_gen <- reactive({

d1= data.frame(...)
d2= data.frame(...)

result <- list(d1=d1, d2=d2) 
return(result)

})

create_file <- reactive({
 sink("/srv/shiny-server/S3/file.txt",append = TRUE)
 print(data_gen()$d1) 
 print(data_gen()$d2)
 sink()

})

output$downloadData <- downloadHandler(

  filename = function() {"input.txt"},
  content = function(file) {

      sink(file,append = TRUE)

    print(data_gen()$d1) 
    print(data_gen()$d2)

      sink()
  }
)


}

我可以下载数据,但该应用程序对该create_file功能没有反应,也没有将副本写入闪亮的服务器。任何想法我怎么能解决这个问题?

4

1 回答 1

3

您的create_file功能是反应式的。反应函数仅在 1) 需要其输出和 2) 其输入已更改时进行评估。两者似乎都不适用于这里。

你可以做的是移动create_file你的下载处理程序中的内容。content必须接收一个返回文件的函数,但该函数可以先做其他事情。所以尝试以下方法:

server <- function(input, output, session){

    data_gen <- reactive({
        d1= data.frame(...)
        d2= data.frame(...)
        result <- list(d1=d1, d2=d2) 
        return(result)
    })

    output$downloadData <- downloadHandler(

        filename = function() {"input.txt"},
        content = function(file) {

        # save non-user copy
        sink("/srv/shiny-server/S3/file.txt",append = TRUE)
        print(data_gen()$d1) 
        print(data_gen()$d2)
        sink()

        # copy to be returned for user
        sink(file,append = TRUE)
        print(data_gen()$d1) 
        print(data_gen()$d2)
        sink()
    })
}
于 2018-10-17T21:00:13.000 回答