我已经看过这个问题,但似乎仍无法使我的代码正常工作
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())
为了实现这一点,我认为该文件必须是非反应性的。
谢谢!
答案 0 :(得分:1)
isolate
在这里不会帮到你。其目的是使(部分)反应物不会对输入的变化做出反应。
根据您的描述,您似乎想拥有可以某种方式变异的数据?如果你只需要在不改变它们的情况下访问单元格,你就不需要做任何事情,只要你处于一个被动反应的环境中(即渲染,观察,反应,甚至更多)就行了
filedata()[row, column]
访问您的手机。例如,如果您想要对第一行中第三个单元格的值进行反应,则可以执行
thirdCellInFirstRow <- reactive(filedata()[row, column])
然后使用thirdCellInFirstRow()
在另一个被动反应中访问该值。
如果您需要能够更改数据集中的数据,例如单元格的内容,则需要使用不同的结构。一种可能性是reactiveValues
或reactiveVal
。在服务器函数中创建一个空的reactiveValues
:
storedData <- reactiveValues
然后您可以将数据框存储在那里,例如在您的filedata反应中使用它:
storedData$df <- read.csv(inFile$datapath)
现在,您可以从storedData$df
访问其他反应环境中的数据集,并向其读取或写入数据。