【问题标题】:How to use isolate to make a dataframe non-reactive in R Shiny?如何使用隔离使数据框在 R Shiny 中无反应?
【发布时间】:2018-02-09 22:32:04
【问题描述】:

我已经看过这个问题,但似乎仍然无法让我的代码工作

How to 'save' reactive dataframe as non-reactive in shiny/R

我正在尝试将 csv 文件读入 Shiny 应用程序,然后将 csv 文件中的每个单元格设置为稍后在应用程序中使用的变量。这可能吗?我一直在阅读有关使用 isolate() 的信息,但它并没有为我工作。每次我从文件中的信息创建变量时,都会出现一个错误,指出由于文件是反应性的而无法创建。我用来读取文件的代码如下。任何有关如何从 csv 内容创建变量的帮助都会非常有帮助。

filedata <- reactive({
  inFile <- input$datafile

  if (is.null(inFile))
    return(NULL)

  data <- read.csv(inFile$datapath)

}) 
isolate(filedata())

为了让它工作,我相信文件必须是非反应性的。

谢谢!

【问题讨论】:

    标签: r file csv input reactive


    【解决方案1】:

    isolate 在这里帮不了你。它的目的是使(部分)反应式不响应输入的变化。

    根据您的描述,您似乎希望拥有可以以某种方式变异的数据?如果您只需要在不更改单元格的情况下访问它们,那么您实际上不需要做任何事情,只要您处于反应式环境中(即渲染、观察、反应式,可能更多)就可以了

    filedata()[row, column] 
    

    访问您的手机。例如,如果你想对第一行第三个单元格的值进行反应,你可以这样做

    thirdCellInFirstRow <- reactive(filedata()[row, column])
    

    然后使用thirdCellInFirstRow() 在另一个反应式中访问该值。

    如果您需要能够更改数据集中的数据,例如单元格的内容,那么您需要使用不同的结构。一种可能性是reactiveValuesreactiveVal。在你的服务器函数中创建一个空的reactiveValues

    storedData <- reactiveValues
    

    然后您可以将您的数据框存储在那里,例如通过在您的 filedata 反应式中使用它:

    storedData$df <- read.csv(inFile$datapath) 
    

    现在您可以以 storedData$df 的身份从其他反应式环境访问该数据集,并向其中读取或写入数据。

    【讨论】:

    • 如果您想了解更多信息,我建议您阅读闪亮中心上的反应性教程,或者观看 ShinyConf 的视频讲座。一开始这有点不寻常,但一旦你习惯了它,反应性就非常适合编程。
    猜你喜欢
    • 2015-08-07
    • 2019-05-31
    • 1970-01-01
    • 2017-01-17
    • 2022-01-23
    • 2018-07-29
    • 2021-12-14
    • 1970-01-01
    • 2020-02-12
    相关资源
    最近更新 更多