我正在尝试创建一个闪亮的R应用程序.我有一些麻烦,在单选按钮中显示欧元符号(并将其返回).我尝试过不同版本的代码:
library(shiny)
runApp(list(
ui= navbarPage(title = 'shoe euro',
radioButtons('var', 'var',
c("INCOME_MGL",
"INCOME_MGL€",
"INCOME_MGL€",
"INCOME_MGL€",
"INCOME_MGL\u20ac")
)),
server=function(input, output, session) {
}))
Run Code Online (Sandbox Code Playgroud)
但"€"并未出现在网页中.此外,如果我选择第二个选项,页面将返回错误:
"Error in fromJSON(content, handler, default.size, depth, allowComments, :
invalid JSON input"
Run Code Online (Sandbox Code Playgroud)
问题就出在类shiny-options-group的div功能.此类的工作方式似乎转换&为&,阻止浏览器转换€为,€因为它首先将其更改为€.尝试以下作为你的ui.R来看它发生.
library(shiny)
options = as.list(c("a","b",HTML("€"),"€"))
shinyUI(fluidPage("test",fluidRow(div(class = "shiny-options-group", options))))
Run Code Online (Sandbox Code Playgroud)
在单选按钮小部件中发生这种情况的原因是radioButtons调用generateOptions创建选项列表,并generateOptions返回div(class = "shiny-options-group", options),其中options派生自函数中choices参数的操作radioButtons.这是你可以做的:
generateOptions 此处的代码(第653行).generateOptions2使用完全相同的代码定义新函数generateOptions,但最后更改类参数.radioButtons通过运行获取代码shiny::radioButtons radioButtons2并在其中替换generateOptionswith generateOptions2.shiny通过运行类似的东西来设置两个新功能的环境environment(radioButtons2) <- environment(radioButtons)radioButtons2在代码中使用而不是radioButtons我唯一不知道的是将类参数更改为generateOptions2.我对div课程知之甚少.
我可能说得太早了.看起来这个问题更深入了.该div函数调用tags$div,调用tag设置为第一个参数"div". tag然后structure用参数调用基函数class = "shiny.tag". structure然后attributes用参数调用原始函数class = "shiny.tag". attributes使用此参数然后转换&为&.因此,看起来似乎没有办法使用该div功能并取回欧元符号.我试图替换div在generateOptions2用HTML,但返回的一堆乱七八糟的东西,当我跑的应用程序.你必须改变它的行为class = "shiny.tag",但这可能会产生深远的不可预测的影响.
弄清楚了!诀窍是使用gsub来代替每个&只用&它从返回之前generateOptions2.我把你发布的功能版本放在github上.它需要加载我前面提到的两个函数,它们(在我的存储库中)存储在一个名为的文件中functions.R.重要的generateOptions2是gsub(pattern = "&", replacement = "&", div(class = "shiny-options-group", options)).