如何使用isolate来使R Shiny中的数据帧无反应?

时间:2017-08-31 21:34:24

标签: r file csv input reactive

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

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

为了实现这一点,我认为该文件必须是非反应性的。

谢谢!

1 个答案:

答案 0 :(得分:1)

isolate在这里不会帮到你。其目的是使(部分)反应物不会对输入的变化做出反应。

根据您的描述,您似乎想拥有可以某种方式变异的数据?如果你只需要在不改变它们的情况下访问单元格,你就不需要做任何事情,只要你处于一个被动反应的环境中(即渲染,观察,反应,甚至更多)就行了

filedata()[row, column] 

访问您的手机。例如,如果您想要对第一行中第三个单元格的值进行反应,则可以执行

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

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

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

storedData <- reactiveValues

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

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

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