R Shiny: реактивные значения от функции - PullRequest
0 голосов
/ 08 мая 2018

Я сохранил несколько таблиц в файлах .rds, которые я хотел бы импортировать с использованием readRDS в Shiny-сессии. Поэтому я определил следующую глобальную функцию:

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(...). Это приводит к следующему сообщению об ошибке:

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 голосов
/ 08 мая 2018

У вас есть правильная идея, просто поместите функцию внутри функции reactive или observe_. Хотя вы можете определить reactiveValues в первоначальном вызове, на мой взгляд, лучше всего создать объект реактивных значений пустым, а затем выполнять все ваши назначения с пометкой <-.

Путаница возникает из-за того, что, несмотря на название, reactiveValues не является реактивным выражением. Он генерирует объект реагирующий значения, в котором могут быть сохранены реактивные значения, но он запускается только один раз и не проверяет, являются ли его значения недействительными.

В вашем случае я бы сделал следующее:

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