2017-02-20 23 views
0

我想從selectizeInput刪除初始值(selected=)當用戶點擊小部件。Shiny selectizeInput:點擊刪除初始選定的值

下面是一個示例代碼:

library(shiny) 
library(dplyr) 

ui= fluidPage(
    sidebarLayout(
    sidebarPanel(
     selectizeInput(inputId= "cyl", label= "cyl", 
        choices= NULL, 
        selected= sort(unique(mtcars$cyl))[1], 
        multiple=T) 
    ), 
    mainPanel(
     tableOutput("tab") 
    ) 
) 
) 

server= function(input, output,session) { 

    updateSelectizeInput(session = session,inputId ="cyl",choices=sort(unique(mtcars$cyl)),selected=sort(unique(mtcars$cyl))[1], server = TRUE) 

    df_filtered= reactive({ 
    mtcars %>% 
    {if (is.null(input$cyl)) . else filter(., cyl %in% input$cyl)} 
    }) 
    output$tab= renderTable(df_filtered()) 
} 

shinyApp(ui, server) 

只是一個上的示例代碼鹼位的解釋:

初始選擇的值在selectizeInput "cyl"4。當用戶按下這個小部件,我希望值4被刪除selected選項被清除。有任何想法嗎?

*我已經因爲在我shiny app選擇選擇使用的功能updateSelectizeInputserver是非常大的,導致過加載時間較長

回答

2

您可以使用shinyjs::onclick調用updateSelectizeInput當在selectize領域的用戶點擊,例如:

library(shiny) 
library(dplyr) 
library(shinyjs) 

ui= fluidPage(
    useShinyjs(), 
    sidebarLayout(
    sidebarPanel(
     selectizeInput(inputId= "cyl", label= "cyl", 
        choices= NULL, 
        selected= sort(unique(mtcars$cyl))[1], 
        multiple=T) 
    ), 
    mainPanel(
     tableOutput("tab") 
    ) 
) 
) 

server= function(input, output,session) { 

    updateSelectizeInput(session = session,inputId ="cyl",choices=sort(unique(mtcars$cyl)),selected=sort(unique(mtcars$cyl))[1], server = TRUE) 

    df_filtered= reactive({ 
    mtcars %>% 
    {if (is.null(input$cyl)) . else filter(., cyl %in% input$cyl)} 
    }) 
    output$tab= renderTable(df_filtered()) 

    onclick("cyl", { 
    updateSelectizeInput(session, "cyl", selected = "") 
    }) 
} 

shinyApp(ui, server)