R Shiny 中反应式表达式中的全局赋值?

Global assignment within a reactive expression in R Shiny?

假设我有一个由用户上传的数据对象:

  data <- reactive({
    inFile <- input$file
    if (is.null(inFile)) return(NULL)
    data <- read.csv(inFile$datapath)
    return(data)
  })

假设我想删除数据集中的列。我想将其设置为全局分配,以便我可以多次 运行 UI 并将每个效果保存在对象中。

dataset <- reactive({
    file1 <- data()
    file1[,input$deletecols] <<- NULL
    return(file1)
   }}
})

然而,当我 运行 这个时,我得到错误:

invalid (NULL) left side of assignment

导致此错误的原因是什么?如果全局分配不起作用,我该如何实现这种效果?

非常感谢。

您应该使用 reactiveValues() 来满足这种需求,因为它允许您在应用的不同阶段创建和修改数据。

这是一个例子(未测试):

values <- reactiveValues()

observe({
   inFile <- input$file
   if (!(is.null(inFile))){
     values$data <- read.csv(inFile$datapath)
   }
 })

observe({
  values$data[,input$deletecols] <- NULL
})