2015-09-28 3 views
1

Я хочу использовать reactiveValues() в моем блестящем приложении, но я не уверен, как это сделать.Как назначить reactiveValues ​​() Shiny

У меня есть actionButton и в зависимости от состояния этого actionButton я хочу назначить data.frame некоторых reactiveValues, которые затем будут обработаны некоторыми observers.

Как я писал это, как этот

server.R 

myDataFrame <- reactiveValues() 

observeEvent(input$myButton, { 
    myDataFrame$forProcessing <- some.data.frame 
}) 

observe({ 
    #do something with myDataFrame$forProcecessing 
}) 

Однако, что аварии. Я думаю, его потому, что myDataFrame получает созданный вид «пустой», который затем вызывает мой observe() #do something... сбой ?!

Как создать reactiveValues правильно, чтобы он запускал observer() только при его заполнении?

ответ

2

Вам необходимо создать реактивные значения с уже существующим содержимым. Решение состоит в том, чтобы положить пустой кадр данных в реактивные значения и наблюдать за тем, чтобы ничего не происходило, когда data.frame пуст. Итак:

myDataFrame <- reactiveValues(forProcessing = data.frame()) 

и:

observe({ 
    if (nrow(myDataFrame$forProcessing) != 0) { 
     #do something with myDataFrame$forProcecessing 
    } 
}) 
+0

О действительно? Я делаю это (создавая 'df' с' NULL'), но так как у меня много зависимостей от 'myDataFrame $ forProcessing', казалось, немного взломанно всегда вызывать' if else' для проверки 'NULL' в начале каждого observer ... – Stophface

+0

Проблема в том, что Shiny необходимо определить, какие реакции будут существовать. Так что на лету добавление материала к нему не работает. Чтобы ограничить операторы 'if' в сценарии Shiny, вы можете сделать ваши функции надежными для ввода пустых данных, то есть они могут обрабатывать' data = data.frame() '. –

+0

И что касается хакерства, я не видел структуру вашего приложения, поэтому сложно комментировать, является ли это недооптимальным решением. –

Смежные вопросы