【问题标题】:R Shiny: Server-side selectize with custom similarity metricR Shiny:使用自定义相似度指标进行服务器端选择
【发布时间】:2018-10-06 09:15:47
【问题描述】:

目标:当用户在selectize 输入中键入查询时,我想根据通常的字符串匹配以及自定义相似度来过滤下拉列表指标。例如,如果用户键入“Obama”,我希望建议包含“Barack Obama”、“Obamacare”等(字符串匹配)以及“president”或“politician”(同义词)。

设置:同义词列表由server.R 中的某个函数实时返回,该函数将用户输入的内容作为输入。我想我需要使用本教程中描述的“服务器端选择”方法:https://shiny.rstudio.com/articles/selectize.html:

客户端选择输入完全依赖 JavaScript 来处理 在打字时搜索。 服务器端selectize输入使用R来处理 搜索,R 将返回过滤后的数据进行选择。使用 服务器版本,你需要在 UI 中创建一个 selectize 实例, 并将其更新为服务器版本

问题

  • 如何访问用户在文本框中键入的字符串以提供我的函数?
  • 如何让updateSelectizeInput 函数将我的函数返回的同义词列表考虑在内?

【问题讨论】:

  • 向我们展示你到目前为止所做的事情,...

标签: r shiny


【解决方案1】:

如何访问用户在文本框中键入的字符串以提供我的函数?

默认情况下,Selectize 不会将该数据发送回 Shiny。需要用JS来获取。

幸运的是,shiny 允许我们将选项传递给 selectize 构造函数。看看selectize documentationloadonType 似乎很有希望。每个 input 事件都会调用这两个函数。

如何让updateSelectizeInput 函数考虑我的函数返回的同义词列表?

然后,您可以让您的 JS 使用 JS 控制的输入通知 Shiny 选择文本框的值,并使用它来驱动您的 updateSelectizeInput 函数。见communicating with js

如果你给 JS 新选项列表,你也可以跳过updateSelectizeInput 并直接从 javascript 操作选项,但这似乎更复杂。如果你想这样做,你需要使用this.removeOption 或其他东西来摆脱旧值(API docs)。

添加自定义 JS 到 selectize 元素的演示

library(shiny)

ui <- fillPage(
  selectizeInput("demo", "Filter with custom function",
                 c("Pre", "Provided", "Options"),
                 options = list(
                   load = I('function(input, callback) {
                                // input is the text in the select widget.
                                // callback in this case adds elements to the option list.

                                console.log(input, this)
                                callback([{"label": "Populated from js", "value": "Populated"}])
                            }'))
                 )
  )

server <- function(input, output) {
}

# Run the application
shinyApp(ui = ui, server = server)

【讨论】:

  • 谢谢。我还没有时间详细查看您的答案并尝试您的建议,但我正在奖励赏金,因为它会在 30 分钟内结束,如果不奖励,代表将丢失
  • 如果您对这种方法感到困惑,请随时发表评论。如果您需要,我可以提供更完整的演示 :)
猜你喜欢
  • 1970-01-01
  • 2012-07-31
  • 2018-02-03
  • 2019-10-19
  • 1970-01-01
  • 2021-07-22
  • 2016-04-15
  • 2019-06-22
  • 1970-01-01
相关资源
最近更新 更多