2015-04-01 114 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))