Передача реактивных данных в качестве выбора для updateSelectizeInput - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь передать реактивные данные в updateSelectizeInput , но вместо этого получаю следующую ошибку:

Ошибка в .getReactiveEnvironment () $ currentContext (): Операция не разрешена безактивный реактивный контекст.(Вы пытались сделать что-то, что можно сделать только из реактивного выражения или наблюдателя.)

Мой код выглядит следующим образом:

ui.R

 library(shiny)


  ui_panel <- 
  tabPanel("Text Input Test",
          sidebarLayout(
           sidebarPanel( 


           selectizeInput('Organisations', label = "Organisation Search", 
   choices = NULL, options = list(
             placeholder = 'Type the organisation name', maxOptions = 10, 
   maxItems = 1, searchConjunction = 'and')),
           tags$style(type="text/css",
                      ".selectize-input::after{visibility:hidden;};"
                      ),


           br(),
           selectInput(
             inputId="selectData",
             label=" ",
             choices=c("Universities", "Hospitals")
           ),

           br()
         ),
         mainPanel(
           tabsetPanel(

             tabPanel("output of Organisation search 
 details",htmlOutput("orgsearchdetails"))

           )
         )
       ))


ui <- shinyUI(navbarPage(" ",ui_panel))

server.R

   library(shiny)


  shinyServer(
   function(input, output, session) {



    orgdata <- reactive({if(input$selectData=='Universities'){
    orgdata <- read.csv("universities.csv")
   }else if (input$selectData=='Hospitals'){ 
    orgdata <- read.csv("hospitals.csv")
    }
    orgdata
   })




    updateSelectizeInput(session, 'Organisations', choices = 
   as.character(unique(
     orgdata()$name)), server = TRUE)




  output$orgsearchdetails <-renderUI({ 


    })


  session$onSessionEnded(function() { dbDisconnect(con) })
  })

Есть ли способ передать реактивность selectInput в updateSelectizeInput?

IЯ выбираю updateSelectizeInput вместо реактивного selectInput, чтобы избежать заполнения поля при запуске приложения.

Любая помощь или понимание очень приветствуется.заранее спасибо.

1 Ответ

0 голосов
/ 17 мая 2018

Я не очень блестящий эксперт, но из инструментальных панелей, которые я строил, вот что я бы сделал. Я бы создал reactiveValues переменную с именем selectedData. Тогда в моем observeEvent я бы вытащил csv и обновил selectedData. Причина, по которой я решил использовать reactiveValues в моем приложении, заключается в том, что они могут быть с состоянием, а не просто всегда реагировать на какой-либо ввод, и я могу вызывать их в других областях приложения, для которых требуется та же информация. Что касается использования observeEvent, это просто, потому что вы можете затем обернуть ваш updateSelectizeInput в наблюдателя.

shinyServer(
  function(input, output, session) {
    # init reactiveValues
    selectedData <- reactiveValues()

    observeEvent(input$selectData, {
      if (input$selectData == "Universities") {
        selectedData$orgdata <- read.csv("universities.csv")
      } else if (input$selectData == "Hospitals") {
        selectedData$orgdata <- read.csv("hospitals.csv")
      }

      updateSelectizeInput(session, "Organisations",
                           choices = as.character(unique(selectedData$orgdata$name)),
                           server = TRUE)
    })

    ... # rest of your code

  }
)
...