【问题标题】:Select multiple items for search keyword by pressing Enter in R Shiny input通过在 R Shiny 输入中按 Enter 选择多个搜索关键字项
【发布时间】:2018-03-12 04:18:07
【问题描述】:

我正在尝试通过使用输入的搜索关键字并按 Enter 选择关键字的所有匹配项来选择 Shiny 的选择输入中的项目。

sn-p 中的observe 函数如果我提供了一个类似ALL 的项目,该项目已经存在于列表中,但我希望它适用于任何类型的关键字。例如App 并按 Enter 键选择所有匹配项。

看看是否有其他自定义选项可以使用 jquery 或其他东西进行编码以捕获键入的输入并捕获过滤的项目,这将会很有趣。或者可能是一些正则表达式,而不是我在if 条件中使用的"ALL"

    ---
    title: "search and select multiple items by pressing Enter"
    output: 
      flexdashboard::flex_dashboard:
        orientation: columns
        vertical_layout: fill
    runtime: shiny
    ---

    ```{r setup, include=FALSE}
    library(flexdashboard)
    ```

    Column {.sidebar data-width=300}
    -----------------------------------------------------------------------

    ```{r}
    #####################
    ### Reactive Parameters 

    Parameters <- reactive({
      c("ALL","Apple","App","Application","Approximate","Appointment","Ap_titude","Apricot","B","Ball","Bat","Battery")
    })

    output$params = renderUI({
      selectInput(
        'params',
        'Parameters',
        choices = Parameters(),
        multiple = TRUE,
        selectize = TRUE
      )
    })

    observe({
      if("ALL" %in% input$params){
        param_selection <- setdiff(Parameters(), "ALL")
      } else {
        param_selection <- input$params
      }
      updateSelectInput(session, "params", selected = as.character(unlist(param_selection)))
    })


    uiOutput("params")

    ```

    Column
    -----------------------------------------------------------------------

    ### Summary

    ```{r}

    ```

【问题讨论】:

    标签: r shiny reactive-programming


    【解决方案1】:

    我找到了selectize.js 的帮助。它在 Shiny 的selectize 页面上被超链接。

    我最终使用了create 函数来让它工作。必须使用callback 而不是return。基于搜索字符串的选择显示undefined,我无法让它显示正确的选择。但由于我有 observe 函数,我可以通过它访问 updateSelectInput,所以我并不担心。

    这是我整理的示例代码。

        ---
        title: "search and select multiple items by pressing Enter"
        output: 
          flexdashboard::flex_dashboard:
            orientation: columns
            vertical_layout: fill
        runtime: shiny
        ---
    
        ```{r setup, include=FALSE}
        library(flexdashboard)
        library(dplyr)
        ```
    
        Column {.sidebar data-width=300}
        -----------------------------------------------------------------------
    
        ```{r echo=FALSE}
        #####################
        ### Reactive Parameters 
    
        Parameters <- reactive({
          c("ALL","Apple","App","Application","Approximate","Appointment","Ap_titude","Apricot","B","Ball","Bat","Battery")
        })
    
        output$params = renderUI({
          selectizeInput(
            'params',
            'Parameters',
            selected = NULL,
            choices = Parameters(),
            multiple = TRUE,
            options = list(
            delimiter= ',',
            persist= FALSE,
            create = I("function(input, callback) {
                callback({
                    'value': input,
                    'text': input
                });
            }")
            )    
          )
        })
    
        observe({
          dt <- as.character(unlist(Parameters()))
          if(is.null(input$params)){
            return()
          } else{
              if("ALL" %in% input$params){
                param_selection <- setdiff(dt, "ALL")
              } else {
                param_selection <- dt[grep(paste(input$params, collapse = "|"), dt)]
              }
          }
          updateSelectInput(session, "params", selected = as.character(unlist(param_selection)))
        })
    
    
        uiOutput("params")
    
        ```
    
        Column
        -----------------------------------------------------------------------
    
        ### Summary
    
        ```{r}
    
        ```
    

    这是输出:

    搜索字符串-“App”,添加

    单击“添加应用程序”的那一刻,观察函数触发并将选择更新为与关键字匹配的所有值。

    希望这可以帮助像我一样面临同样问题的其他人。

    【讨论】:

    • 嗯,试试这个,我得到undefined,即使有回调。
    • 我以为我提到了它,我也看到了undefined,但observe 函数会小心并更新输入,因此它不会持续很长时间。您是否尝试运行我的工作代码?
    • 嘿,我明白了,谢谢,但现在它没有添加所有匹配选项。将调试并报告!
    • @tcash21 我正在尝试运行代码,但似乎效果不佳。您是否有解决此问题的方法,因为我正在尝试解决相同的问题(大量用户输入)
    猜你喜欢
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多