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
})
假设我有一个由用户上传的数据对象:
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
})