简体   繁体   中英

selectInput in R shiny

I want to select from a list read in from a Mysql query. I am getting an error in the code. I must be doing something just completely wrong, but not sure what.

I would like to select from a list of skus read in from a sql query. I get an error in the ui portion.

I am not even sure if this is possible, but to list out all skus would be extremely timely.

I am getting the following errors:

Error in tag("div", list(...)) : argument "sidebarPanel" is missing, with no default

shinyApp(ui = ui, server = server) Error in force(ui) : object 'ui' not found

library('RMySQL')
library('plyr')
library('shiny')
library('scales')
library(shinyapps)
library(ggplot2)



con <- dbConnect(MySQL(), user="user", password="password",dbname="DB", host="host");


rank<-dbGetQuery(con,"select sku from DB")




#build a shiny app to select which sku to pick
server <- function(input, output) {

  output$distPlot <- renderPlot({
    hist(rnorm(input$obs), col = 'darkgray', border = 'white')
  })
}

ui <- pageWithSidebar(
  ## Application title

    sidebarPanel(
      sliderInput("obs", "Number of observations:", min = 10, max = 500, value = 100),
      selectInput(
        'e0', '0. An ordinary select input', choices = unique(rank$sku),
        selectize = FALSE
      ),

      mainPanel(plotOutput("distPlot"))

  )

)

shinyApp(ui = ui, server = server)

You have both a missing bracket near your selectize = FALSE and (as @DavidRobinson has suggested) you need a headerPanel .

CODE FIX

library(shiny)
library(ggplot2)
# con <- dbConnect(MySQL(), user="user", password="password",dbname="DB", host="host");
# rank<-dbGetQuery(con,"select sku from DB")
# for test hard coding the rank as I dont have your data
# test rank
rank$sku <- c(1,2,3)

#build a shiny app to select which sku to pick
server <- function(input, output) {
  output$distPlot <- renderPlot({
    hist(rnorm(input$obs), col = 'darkgray', border = 'white')
  })
}

ui <- pageWithSidebar(
  ## Application title

  # missing headerPanel
  headerPanel(title = "Hello"),

  # missing bracket after selectize
  sidebarPanel(
    sliderInput("obs", "Number of observations:", min = 10, max = 500, value = 100),
    selectInput(
      'e0', '0. An ordinary select input', choices = unique(rank$sku),
      selectize = FALSE) 
    ),

  mainPanel(plotOutput("distPlot"))    
)

shinyApp(ui = ui, server = server)

RESULT

FixedSidebarShinyWebpageImage

ANOTHER SHINY PAGE UI OPTION

You can can also use a tabbed page structure, replacing ui above with this code (note it does not require headerPanel like above):

# navbar tabbed page example - without headerPanel
ui2 <- navbarPage(title = "Hello Another Style", 
           tabPanel("Chart Panel",
                    sidebarLayout(
                      sidebarPanel(
                        sliderInput("obs", "Number of observations:", 
                                    min = 10, max = 500, value = 100),
                        selectInput(
                          'e0', '0. An ordinary select input', 
                          choices = unique(rank$sku),
                          selectize = FALSE)
                        ),
                      mainPanel(
                        plotOutput("distPlot")
                      )
                    )
           ),
           tabPanel("Instructions",
                    mainPanel(
                       p("Notes here for example...")
                    )
           )        

)

SECOND RESULT

Shiny-NavPanelExamplePage1

And then on second panel...

Shiny-NavPanelExamplePage2

DEBUGGING ADVICE

These Shiny pages can have lots of brackets, so pace over your code selecting brackets in turn carefully in your editor like RStudio to make sure your brackets match okay.

All the best!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM