关于r:如何将选项列表中的特殊符号用作名称?

 2021-04-27 

How does one use special symbols in a choices list as names?

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

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

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

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

但这仅显示。我也尝试过:

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

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

但是这些会产生错误。


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

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

以下是\\\\ uXXXX的希腊字母表格:http://www.javascripter.net/faq/greekletters.htm

编辑:
OP是正确的,由于某种奇怪的原因,它不适用于Chi和许多其他字母,但是如果您在较早的步骤中为选择创建命名矢量,则其工作原理如下:

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

edit2:
R和unicode仍然很奇怪,但是我已经很接近您想要的了。我在R中找不到适用于下标k的unicode,但我找到了下标i,所以如果您愿意使用其他下标:

1
2
3
4
5
6
7
8
9
10
11
12
13
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) {

    }
  )
)

edit3:
我仍然认为Unicode是最好的方法,因为在选择选项中包括HTML显然不是一件容易的事:如何在包含HTML实体(-...)的JavaScript中动态创建

我能够在下拉菜单中呈现HTML,但无法显示所选项目。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
library(shiny)
ui <- shinyUI(fluidPage(
  mainPanel(
    selectizeInput("test","test",choices=c("&chi;2<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,但是我在任何地方都没有看到它,因此我仍然持怀疑态度。


看卡尔的答案,并看一下selectizejs自述文件
有可以设置用于渲染的字段列表。
使用"选项"(所有项目列表中的项目)和"项目"(所选项目),我能够提出以下解决方案,该解决方案将正确呈现所选输入以及下拉列表中的输入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
library(shiny)
ui <- shinyUI(fluidPage(
  mainPanel(
    selectizeInput("test","test",choices=c("&chi;2<sub>k</sub>"="chi_k^2"),options=list(
      labelField="name",
      create=FALSE,
      render=I(
        '
        {
            option:function(item,escape) {return String.prototype.concat("", item.name,""},
            item:function(item,escape) {return String.prototype.concat("", item.name,""}
        }
        '
      )
    )
    )
  )
)
)

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

shinyApp(ui = ui, server = server)