R реактивный блеск с updateSelectInput - PullRequest
0 голосов
/ 10 сентября 2018

делаю обновление SelectInput на блестящем, работает. Но после того, как я не могу использовать новый вход как переменную для вывода ... Вход всегда пуст. Я даю вам код для SelectInput в Ui.R и обновления в server.R. Я не могу дать больше, потому что обновление производится через базу данных доступа. И если я создам data.frame только для примера, он будет работать ...

selectInput("indic","Indicateur :",
                                    choices = NULL,selected = NULL),

observeEvent(input$Source,{
          indicateurs<-as.character(voila_source(input$Source)$Indice)


          updateSelectInput(session,"indic",
                            choices = indicateurs)
     })

output$summary<-renderTable({     
          information<-voila_source(input$Source)
          information<-information[,-1]
          indica<-input$indic   ##here is empty...
          print(indica)
          description<-filter(information,Indice==indica)
          description
     })

Может быть, я что-то забыл, я не знаю. Я хочу выбрать вход и распечатать data.frame, соответствующий выбранному входу.

РЕДАКТИРОВАТЬ: Ответ найден

Хорошо, мой код и ваш код работают ... Он должен нажать кнопку submit ... Но я не хочу нажимать кнопку submit для этого, я просто хочу нажать selectInput, чтобы напечатать мой вывод, то есть описание selectInput, и если я хочу это, я нажимаю на кнопку, чтобы отобразить график.

Я нашел ошибку, кнопка submit, я заменил кнопку action, и она работает ... Я не знал о кнопке submit и action.

Если это может помочь вам, это мой код для вызова базы данных доступа и всего кода server.R и кода ui.R:

    library(shiny)
    library(anytime)
    library(plotly)
    library(ggplot2)
    library(dplyr)
    library(RODBC)
    library(ecb)


    channel<-odbcConnectAccess("H:\\Analyse Macro\\Base Macro live.mdb")
    listee<-sqlQuery(channel,paste("Select * from Liste_source"))
    liste_server<-list()
    for (i in 1:length(listee$Table)){
         liste_server[i]<-as.character(listee$Table[i])
    }
    names(liste_server)<-as.character(listee$Table)

    for (i in 1:length(listee$Table)){
         liste_server[[i]]<-sqlQuery(channel,paste("Select * from ",liste_server[i]))
    }

    voila_source<-function(selection){
         x<-as.character(selection)
         liste_donnee<-liste_server[[x]]
         #liste_donnee<-as.character(liste_donnee$Indice)
         liste_donnee$Indice<-as.character(liste_donnee$Indice)
         liste_donnee$Description<-as.character(liste_donnee$Description)
         liste_donnee$Unite<-as.character(liste_donnee$Unite)
         liste_donnee$Frequence<-as.character(liste_donnee$Frequence)
         liste_donnee$Code<-as.character(liste_donnee$Code)
         liste_donnee$Pays<-as.character(liste_donnee$Pays)

         liste_donnee
    }



    # Define server logic required to draw a histogram
    shinyServer(function(input, output,session) {




         observeEvent(input$Source,{
              indicateurs<-as.character(voila_source(input$Source)$Indice)


              updateSelectInput(session,"indic",
                                choices = indicateurs)
         })


         output$summary<-renderTable({     
              information<-voila_source(input$Source)
              information<-information[,-1]
              reactives$indica<-input$indic
              print(reactives$indica)

              description<-filter(information,Indice==reactives$indica)
              description<-data.frame(test=indica)
              description
         })

    })


ui.R

    library(shiny)
    #library(quantmod)
    library(lubridate)
    library(plotly)
    library(ggplot2)
    library(RODBC)

    channel<-odbcConnectAccess("H:\\Analyse Macro\\Base Macro live.mdb")
    liste<-sqlQuery(channel,paste("Select * from Liste_source"))
    liste<-as.character(liste$Table)

    # Define UI for application that draws a histogram
    #shinyUI(fluidPage(
    ui<-tagList(
         navbarPage(
              "Evolutions Economiques",
              tabPanel("Observation",
                       # Application title
                       titlePanel("Evolutions Economiques"),

                       # Sidebar with a slider input for number of bins
                       #sidebarLayout(
                       sidebarPanel(
                            h1("Selection des donnees"),
                            selectInput("Source","Source :",
                                        choices =liste),
                            selectInput("indic","Indicateur :",
                                        choices = NULL,selected = NULL),
                            selectInput("pays","Pays :",
                                        choices = NULL),
                            selectInput("partenaire","Partenaire :",
                                        choices = NULL),
    #### replace by actionbutton submitButton("Ajouter"),
    actionButton("add","Ajouter"),
                            hr(),
                            img(src="logo.png",height=80,width=200),
                            br(),
                            br(),
                            helpText("Application realisee pour l'exploration des donnees macroeconomiques")
                       ),

                       # Show a plot of the generated distribution
                       mainPanel(
                            tabsetPanel(type="tabs",
                                        tabPanel("Description",tableOutput("summary"))
                                                 #,
                                        #plotlyOutput("graph"))
                       ))
              ),

              tabPanel("Extraction",
                       sidebarPanel(

                            selectizeInput("Index","Indice",c("ok")),
                            textInput("Nom","Nom fichier"),
                            actionButton("save","Sauver"),
                            hr(),
                            img(src="logo.png",height=80,width=200),
                            br(),
                            br(),
                            helpText("Application realisee pour l'exploration des donnees macroeconomiques")
                       ),

                       mainPanel(
                            tabsetPanel(type="tabs",
                                        tabPanel("liste",tableOutput("source")))
                       )


              ))
    )

1 Ответ

0 голосов
/ 11 сентября 2018

Судя по вашему примеру, кажется, что вы не инициализировали переменные indicateurs или indica, это правильно?

Если это так, вам понадобится пара дополнительных строк. Причина, по которой ваше решение (создание data.frame) работает, заключается в том, что когда вы тестируете свое приложение, переменная уже существует для функций observeEvent или renderTable. Поэтому просто добавьте несколько строк в ваш скрипт, чтобы сделать это до того, как они будут вызваны.

Вот пример использования реактивных значений (с которыми лучше работать при использовании блестящего приложения):

selectInput("indic","Indicateur :",
                                    choices = NULL,selected = NULL),

# goes in your server.R
reactives <- reactiveValues(indicateurs = NULL, indica = NULL)
observeEvent(input$Source,{
          reactives$indicateurs <-as.character(voila_source(input$Source)$Indice)


          updateSelectInput(session,"indic",
                            choices = reactives$indicateurs)
     })

output$summary<-renderTable({     
          information<-voila_source(input$Source)
          information<-information[,-1]
          reactives$indica<-input$indic   ##here is empty...
          print(reactives$indica)
          description<-filter(information,Indice==reactives$indica)
          description
     })
...