在闪亮的R应用程序中显示欧元符号

时间:2015-04-01 11:44:23

标签: r shiny

我试图创建一个闪亮的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"

1 个答案:

答案 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),其中optionschoices函数中的radioButtons参数的操作派生而来。这是你可以做的:

  1. 获取generateOptions here的代码(第653行)。
  2. 使用与generateOptions2完全相同的代码定义新函数generateOptions,但最后更改类参数。
  3. 运行radioButtons
  4. 获取shiny::radioButtons的代码
  5. 定义新功能radioButtons2,并在其中将generateOptions替换为generateOptions2
  6. 通过运行shiny
  7. 等内容,将新功能的环境设置为environment(radioButtons2) <- environment(radioButtons)
  8. 在代码中使用radioButtons2代替radioButtons
  9. 我唯一不知道的是将类参数更改为generateOptions2。我对div课程了解不多。

    更新

    我可能说得太早了。看起来这个问题更深入了。 div函数调用tags$div,调用tag并将第一个参数设置为"div"tag然后使用参数structure调用基函数class = "shiny.tag"。然后structure使用参数attributes调用原始函数class = "shiny.tag"attributes使用此参数,然后将&转换为&amp;。因此,看起来似乎没有办法使用div函数并取回欧元符号。我尝试用div替换generateOptions2中的HTML,但是当我运行应用时,它返回了一堆垃圾。你必须改变class = "shiny.tag"的行为,但这可能会产生深远的不可预测的影响。

    更新2

    想出来!诀窍是在从gsub返回之前,使用&amp;&替换为generateOptions2。我发布了您发布的on github内容的功能版本。它需要加载我前面提到的两个函数,它们(在我的存储库中)存储在一个名为functions.R的文件中。 generateOptions2中的重要一行是gsub(pattern = "&amp;", replacement = "&", div(class = "shiny-options-group", options))