【问题标题】:Save a file via sink function in shiny server?通过闪亮服务器中的接收器功能保存文件?
【发布时间】:2018-10-17 15:41:23
【问题描述】:

我有一个闪亮的应用程序来生成一个.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 函数没有反应,也没有将副本写入闪亮的服务器。 任何想法我该如何解决这个问题?

【问题讨论】:

    标签: r download shiny save sink


    【解决方案1】:

    你的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()
        })
    }
    

    【讨论】:

      猜你喜欢
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      • 2013-07-20
      • 2021-11-07
      • 2021-03-10
      • 1970-01-01
      相关资源
      最近更新 更多