我试图创建一个闪亮的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"
答案 0 :(得分:5)
问题在于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
here的代码(第653行)。generateOptions2
完全相同的代码定义新函数generateOptions
,但最后更改类参数。radioButtons
shiny::radioButtons
的代码
radioButtons2
,并在其中将generateOptions
替换为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
。我发布了您发布的on github内容的功能版本。它需要加载我前面提到的两个函数,它们(在我的存储库中)存储在一个名为functions.R
的文件中。 generateOptions2
中的重要一行是gsub(pattern = "&", replacement = "&", div(class = "shiny-options-group", options))
。