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

时间:2015-05-31 18:29:39

标签: r null shiny variable-assignment

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

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

然而,当我运行它时,我收到错误:

  

无效(NULL)分配左侧

导致此错误的原因是什么?如果全局分配不起作用,我怎样才能达到这个效果?

非常感谢。

1 个答案:

答案 0 :(得分:2)

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

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

values <- reactiveValues()

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

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