如何使用 isolate 使 R Shiny 中的数据框不反应?

How to use isolate to make a dataframe non-reactive in R Shiny?

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

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())

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

谢谢!

isolate这里帮不了你。它的目的是使(部分)反应不对输入的变化做出反应。

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

filedata()[row, column] 

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

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

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

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

storedData <- reactiveValues

然后你可以在那里存储你的数据框,例如在你的文件数据反应中使用它:

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

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