【问题标题】:How does one use special symbols in a choices list as names?如何在选择列表中使用特殊符号作为名称?
【发布时间】:2020-08-18 02:45:23
【问题描述】:

如何在 ui.R 中使用希腊字母之前已在此处讨论过。例如,如果希望用户为参数 mu 输入数值,可以使用:

numericInput("mu",HTML("μ"),value=0)  

并显示μ。我想做同样的事情,但使用 selectInput 中的选项列表。我试过了:

selectInput("param", label = "Parameter",choices=c("α" = "alpha","beta"))

但这只是显示α。我也试过了:

selectInput("param", label = "Parameter",choices=c(HTML("α") = "alpha","beta"))

selectInput("param", label = "Parameter",choices=c("HTML("α")" = "alpha","beta"))

但这些会产生错误。

【问题讨论】:

标签: r shiny


【解决方案1】:

不要使用 HTML 希腊字母,而是使用 \uXXXX 版本:

selectInput("param", label = "Parameter",choices=c("\u03B1" = "alpha",
                                                     "\u03B2" = "beta",
                                                     "\u03BC"="mu"))

这里是希腊字母的 \uXXXX 表:http://www.javascripter.net/faq/greekletters.htm

编辑: OP 是正确的,由于某些奇怪的原因,这不适用于 Chi 和许多其他字母,但是如果您在前面的步骤中为选择创建命名向量,它的工作方式如下:

choices <- c("alpha","beta","mu","chi")
names(choices) <- c("\u03B1","\u03B2","\u03BC","\u03C7")
selectInput("param","Parameters",choices=choices)

编辑2: R 和 unicode 的情况仍然很奇怪,但我已经非常接近你想要的了。我在 R 中找不到下标 k 的工作 unicode,但我为下标 i 找到了,所以如果你愿意使用不同的下标:

library(shiny)      
choices <- c("X^2_i")
names(choices) <- c("\u03C7\u1d62\U00B2")
runApp(
  list(
    ui = fluidPage(
      selectInput("param","Parameters",choices=choices)
    ),
    server = function(input, output, session) {

    }
  )
)

编辑3: 我仍然认为 Unicode 是最好的选择,因为在选择选项中包含 HTML 显然并非易事:How do I dynamically create an <option> in JavaScript that contains an HTML entity (— ... «)?

我能够让 HTML 在下拉列表中呈现,但不能用于所选项目。

library(shiny)
ui <- shinyUI(fluidPage(
  mainPanel(
    selectizeInput("test","test",choices=c("&chi;<sup>2</sup><sub>k</sub>"="chi_k^2"),options=list(
      labelField="name",
      create=FALSE,
      render=I(
        "{option:function(item,escape) {
          return item.name}}"
      )
    )
    )
  )
)
)

server <- shinyServer(function(input, output) {
})

shinyApp(ui = ui, server = server)

可能有一种方法可以告诉 selectizejs 在选定的框中呈现 html,但我在任何地方都没有看到它,所以我仍然持怀疑态度。

【讨论】:

  • 卡尔,很奇怪
  • 使用 png 的想法可能可行,但看起来有点像 hack
  • 卡尔,很奇怪!您的代码运行良好,但我真正想要的是用作名称:Pearson &chi2。现在在你发给我的网站上,有五个 chi 代码:\u03C7 χ χ %u03C7 %CF%87 并且它们都不起作用! "\u03C7" 显示为 。当然,我仍然会遇到广场的问题。
  • 是的,很奇怪。我已经编辑了我的答案,希望你能做你需要做的事情。
  • Carl,谢谢,这行得通(仍然不明白为什么另一个没有)现在完整的问题:实际上我想使用名称 χ2 sup>k 正确显示
【解决方案2】:

查看 Carl 的答案,并查看 selectizejs Readme 有一个可以为渲染设置的字段列表。 使用“选项”(所有项目列表中的项目)和“项目”(选择的项目)我能够提出以下解决方案,该解决方案将正确呈现所选输入以及下拉列表中的输入:

library(shiny)
ui <- shinyUI(fluidPage(
  mainPanel(
    selectizeInput("test","test",choices=c("&chi;<sup>2</sup><sub>k</sub>"="chi_k^2"),options=list(
      labelField="name",
      create=FALSE,
      render=I(
        '
        {
            option:function(item,escape) {return String.prototype.concat("<div>", item.name, "</div>"},
            item:function(item,escape) {return String.prototype.concat("<div>", item.name, "</div>"}
        }
        '
      )
    )
    )
  )
)
)

server <- shinyServer(function(input, output) {
})

shinyApp(ui = ui, server = server)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2015-03-16
    • 2017-10-14
    • 1970-01-01
    • 2013-07-30
    • 2020-07-03
    相关资源
    最近更新 更多