我正在尝试创建一个闪亮的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) {
}))
但是“€”没有出现在网页中。此外,如果我选择第二个选项,则页面将返回错误:
"Error in fromJSON(content, handler, default.size, depth, allowComments, :
invalid JSON input"
问题出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))))
在您的单选按钮小部件中发生这种情况的原因是,radioButtons
调用generateOptions
创建了选项列表,并generateOptions
返回div(class = "shiny-options-group", options)
,其中options
源自choices
对radioButtons
函数中参数的操作。您可以执行以下操作:
generateOptions
此处获取代码(第653行)。generateOptions2
使用与完全相同的代码定义新函数generateOptions
,但最后更改class参数。radioButtons
通过运行获取代码shiny::radioButtons
radioButtons2
,并在其中更换generateOptions
用generateOptions2
。shiny
通过运行类似的命令来设置两个新功能的环境environment(radioButtons2) <- environment(radioButtons)
radioButtons2
在您的代码中使用,而不是radioButtons
我唯一不知道的是将class参数更改为in的内容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))
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句