【问题标题】:Global assignment within a reactive expression in R Shiny?R Shiny中反应式表达式中的全局赋值?
【发布时间】:2015-08-14 04:19:42
【问题描述】:

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

  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)

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

非常感谢。

【问题讨论】:

  • “The R inferno”第 35 页的提示:避免使用 &lt;&lt;- 并使用 assign 函数。
  • @SabDeM 确实..谢谢你的提醒!

标签: r null shiny variable-assignment


【解决方案1】:

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

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

values <- reactiveValues()

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

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

【讨论】:

  • 谢谢@cafe876 这对我有用!如果您不介意,请快速跟进问题:values$data[,input$date] &lt;- as.character(as.Date(values$data[,input$date],format=dateformat)) 由于某种原因,这在观察中不起作用,日期格式来自用户选择的输入,但是当我运行它时,我只会得到空值,而当这段代码超出了观察范围,它运行良好。希望您能对此有所了解,谢谢!
  • @eyio 很难在没有看到上下文代码的情况下提供帮助。我的第一个猜测是 dataformatvariable 没有在正确的范围内定义
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
相关资源
最近更新 更多