使用Shiny下载.RData文件

3

我正在创建一个Shiny应用程序,其中一个输出最好保存为RData文件供用户使用。

我可以下载各种其他格式的数据,但我不确定如何处理 .RData 文件。在此处保存R对象的替代方法也可以。服务器端的一些虚拟代码如下:

# Make widget
widget <- 1:42

# Download widget
output$widget <- downloadHandler(
  filename=paste0("widget_", Sys.Date(), ".RData"), 
  content=function(file){
    save(widget), file=file)
  }
)

我可以正常点击下载按钮,窗口也会刷新,但没有任何项目被放置在下载队列中。

你是不是括号打的太早了?save(widget), file=file) 应该是 save(widget, file=file)吧? - MDe
2个回答

4
我尝试将一个随机森林模型以.RData格式保存。以下代码对我有效。希望对你也有用。 ui.R 下载按钮('downloadModel','下载RF模型',class="dlButton") server.R 步骤1. 创建一个reactiveValue来保存reactive函数,在我的例子中是随机森林模型rf1()。
# Create a reactive value rf2 to store the random forest model rf1().
rf2 <- reactiveValues()
observe({
  if(!is.null(rf1()))
  isolate(
    rf2 <<- rf1()
  )
})

步骤2. 将reactiveValue保存在downloadHandler中,就像您之前所做的那样。

# Download Random Forest Model
  output$downloadModel <- downloadHandler(
    filename <- function(){
      paste("RF Model.RData")
    },

    content = function(file) {
      save(rf2, file = file)
    }
  )

希望这对您有用。

仅有一点需要注意,这个方法中rk2实际上被定义为全局变量,并且不再是响应式值,因为它是一个响应式函数的结果。对吗?这可能会对其他会话产生影响吗? - agenis

0
使用downloadHandler保存多个对象的最简单方法是将它们组合在一个列表中,并保存为RDS文件。
output$save_btn <- downloadHandler(
    filename = "my_data.rds",
    content = function(file) {
      saved_data <- list("DATA1" = data1(), 
                             "DATA2" = data2, "DATA3" = data3)
      saveRDS(saved_data, file = file)
    }

这是对一个9岁问题的回答,并没有直接回应OP中的问题 - 你在谈论多个项目的列表,而他们特别要求了一种特定的格式。 - Paul Stafford Allen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接