SelectizeInput不会在Shiny.io上显示所有选择

时间:2018-10-09 20:23:20

标签: r shiny shiny-reactivity

我有一个闪亮的应用程序,它带有一个selectizeInput小部件,该小部件可以从远程数据库中以响应数据的形式获取其大约26000个选择。 使用远程数据库和反应性是为了避免在加载选择时出现滞后和缓慢。 问题是,当在本地桌面上启动时,它可以正常工作,但当在Shinyapps.io上上传时,该小部件不会向用户显示所有可用选项。 我一直在使用widgets属性无济于事,例如,设置 SERVER =TRUE 等。 我在下面放置了我正在使用的代码以及指向要加载到selectizeInput的数据的链接作为选择。

UI部分

 library(shiny)
 library(DBI)
 library(RMySQL)
 library(shinydashboard)
 library(shinyjs)

 ui <- dashboardPage(  
     skin="yellow",  
   dashboardHeader(   ), 

  #sidebar content
   dashboardSidebar(
      sidebarMenu(  

          selectInput(
            inputId="selectData",
             label=" ", selected = NULL,
             choices=c( "title" )),      

       menuItem("Titles Search", tabName = "Titles", icon = icon("font"))

        )
       ),

     dashboardBody(

         tags$head(
        tags$style(HTML("
                  .content-wrapper {
                  background-color: green !important;
                  }

                  .main-header {
                  background-color: red !important;
                  }

                  "))

        ),

   tabItems(      
      tabItem(tabName = "Titles",              
            fluidRow(
               column(width=3,                        
                    box(                         
                      title=" ",
                       solidHeader=TRUE,
                        collapsible=TRUE,
                     width=NULL,
                     selectizeInput('titles', label = "Search by title", 
                choices = NULL, options = list(
                       placeholder = 'Type the title', maxOptions = 1000, 
                maxItems = 100,multiple = F, searchConjunction = 'and')),
                     tags$style(type="text/css",
                                ".selectize- 
        input::after{visibility:hidden;};"
                     )

                   )
                )
                )
             )                  
         )   
        )
        )

服务器部分

    library(shiny)
    library(DBI)
    library(RMySQL)
    library(shinydashboard)
    library(shinyjs)


      shinyServer(function(input, output, session) { 

        con <- dbConnect(MySQL(), user='XXXX', 
                 port = 3306, password='XXXXX', 
                 dbname='XXXXXX', 
                 host='XXXXXXXX' )
           query <- function(...) dbGetQuery(con, ...)
          on.exit(dbDisconnect(con), add = TRUE)



selectedData <- reactiveValues()

observeEvent(input$selectData, {

  con <- dbConnect(MySQL(), user='XXXXXX', port = 3306, password='XXXX', dbname='XXXXX', host='XXXXXXX' )
  query <- function(...) dbGetQuery(con, ...)
  on.exit(dbDisconnect(con), add = TRUE)

  if (input$selectData == "title") {
    selectedData$titledata <- query("SELECT titles FROM titles ;")
  }

  updateSelectizeInput(session, "titles",
                       choices =  as.character(unique(selectedData$titledata$titles)),
                       server = TRUE)
})

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

 })

我在做什么错?是Shinyapps.io问题还是编码问题?

1 个答案:

答案 0 :(得分:2)

似乎您要选择的项目数量受到限制。您似乎加载了大约1000个项目。

如果您查看选择文档here,则有一个选项maxOptions默认为1000。您甚至可以在用户界面中将此值设置为1000。您的默认数据集包含25k +个选项。

  • 尝试将此数字提高到30k。
  • 也尝试将此选项添加到服务器中的updateSelectizeInput