我有一个闪亮的应用程序,可以生成一个.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
功能,并且不会将副本写入闪亮的服务器。
知道我该如何解决吗?
答案 0 :(得分:2)
您的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()
})
}