2015-04-01 129 views
3

我正试图创建一个闪亮的R应用程序。我有一些麻烦显示欧元符号(并返回它)在一个单选按钮。我试过不同版本的代码:在闪亮的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" 
+2

似乎在我的设备上工作得很好。你运行什么版本的R,闪亮等等? – Pewi 2015-04-01 12:29:21

+1

我得到了同样的错误。我在Windows 7 Professional(64位)机器上运行RStudio 0.98.1087,R 3.1.2,闪亮的0.11.1。该错误发生在内置的RStudio浏览器和Chrome 41.0.2272.101米。 – 2015-04-02 14:42:42

回答

5

问题出在类shiny-options-groupdiv功能。这个类的工作方式似乎将&转换为&,阻止浏览器将€转换为,因为它首先将其更改为€。尝试以下作为你的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是从radioButtons功能choices参数的操作的。以下是您可以执行的操作:

  1. 获取代码generateOptionshere(第653行)。
  2. 使用与generateOptions完全相同的代码定义新函数generateOptions2,但在末尾更改类参数。
  3. 运行shiny::radioButtons
  4. 定义一个新的功能radioButtons2获取radioButtons的代码,并在其与generateOptions2更换generateOptions
  5. 在你的代码一样environment(radioButtons2) <- environment(radioButtons)
  6. 运行使用的东西,而不是radioButtons2radioButtons

设置两个新的功能shiny环境,我不知道的唯一的事情就是更改类参数在generateOptions2。我不太了解div课程。

更新

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

更新2

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