通过闪亮服务器中的接收器功能保存文件?
Save a file via sink function in shiny server?
我有一个闪亮的应用程序可以生成 .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
功能没有反应,也没有将副本写入闪亮的服务器。
知道我该如何解决这个问题吗?
您的 create_file
功能是被动的。反应函数仅在 1) 需要它们的输出,以及 2) 它们的输入发生变化时才进行评估。两者似乎都不适用于此处。
您可以将 create_file
的内容移动到您的下载处理程序中。 content
必须接收一个函数,即 returns 一个文件,但是函数可以先做其他事情。所以请尝试以下操作:
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()
})
}
我有一个闪亮的应用程序可以生成 .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
功能没有反应,也没有将副本写入闪亮的服务器。
知道我该如何解决这个问题吗?
您的 create_file
功能是被动的。反应函数仅在 1) 需要它们的输出,以及 2) 它们的输入发生变化时才进行评估。两者似乎都不适用于此处。
您可以将 create_file
的内容移动到您的下载处理程序中。 content
必须接收一个函数,即 returns 一个文件,但是函数可以先做其他事情。所以请尝试以下操作:
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()
})
}