R Shiny:来自函数的反应值

时间:2018-05-08 12:02:00

标签: r shiny reactive

我在.rds文件中存储了几个表,我希望在Shiny会话中使用readRDS导入。因此我定义了以下全局函数:

get.station <- function(sname){
  file.name <- paste(sname".rds", sep="")
  return(readRDS(file.name))
}

在服务器功能中我定义了无功值:

st.reactive <- reactiveValues(get.station(input$station.sel))

其中input$station.sel来自使用selectInput(...)的ui。这会导致以下错误消息:

Operation not allowed without an active reactive context. 
(You tried to do something that can only be done from inside 
a reactive expression or observer.)

如果我使用reactive()定义此函数,则此错误消息甚至不会消失:

get.station <- reactive({
    file.name <- paste(input$station.sel".rds", sep="")
    return(readRDS(file.name))
  })

并在服务器内:

st.reactive <- reactiveValues(data=get.station())

你有任何帮助吗?

1 个答案:

答案 0 :(得分:0)

你有正确的想法,只需将函数放在reactiveobserve_函数中。虽然您可以在初始调用中定义reactiveValues,但在我看来,最好将反应值对象设置为空,然后使用<-符号执行所有分配。

这种混淆来自这样一个事实,即尽管它的名字,reactiveValues不是反应性表达。它生成一个reactiveValues对象,可以存储反应值,但它只运行一次,不检查其值是否无效。

在您的情况下,我会执行以下操作:

rv <- reactiveValues()
rv$st.reactive <- observe({get.station(input$station.sel)})