【问题标题】:Update a data frame in shiny server.R without restarting the App在闪亮的 server.R 中更新数据框而不重新启动应用程序
【发布时间】:2013-01-31 20:52:47
【问题描述】:

关于如何在不停止和重新启动应用程序的情况下更新闪亮正在使用的数据框的任何想法?

我尝试将load(file = "my_data_frame.RData", envir = .GlobalEnv) 放在反应函数中,但到目前为止没有运气。数据框在应用停止后才会更新。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    如果您只是更新常规变量(在全局环境中或其他),Shiny 不知道对它们做出反应。您需要使用 reactiveValues 对象来存储您的变量。您使用reactiveValues() 创建一个,它的工作方式与环境或列表非常相似——您可以在其中按名称存储对象。您可以使用$foo[['foo']] 语法来访问值。

    一旦反应函数从 reactiveValues 对象中读取一个值,如果该值在未来被不同的值覆盖,那么反应函数就会知道它需要重新执行。

    这是一个示例(由于您使用的是 load 而不是返回单个值的东西,例如 read.table,因此变得更加复杂):

    values <- reactiveValues()
    updateData <- function() {
      vars <- load(file = "my_data_frame.RData", envir = .GlobalEnv)
      for (var in vars)
        values[[var]] <- get(var, .GlobalEnv)
    }
    updateData()  # also call updateData() whenever you want to reload the data
    
    output$foo <- reactivePlot(function() {
      # Assuming the .RData file contains a variable named mydata
      plot(values$mydata)
    }
    

    我们应该很快就会有关于这些东西的更好的文档。感谢您在此期间与我们相处。

    【讨论】:

    • 非常有帮助。谢谢! get() 的技巧也很值得了解 :)
    猜你喜欢
    • 2016-06-24
    • 2017-08-10
    • 2017-12-05
    • 2017-10-14
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多