2015-10-16 22 views
5

DT -packageを使用してデータテーブルを表示する光沢アプリがあります。私が望むのは、カスタムの方法で列の書式を設定できることです。たとえば、私は通貨の値をDT -wayの代わりに1,234.50€と表示したいと考えています。この$ 1,234.5のように表示します(シンボルの変更、通貨記号の位置、および小数点)。アンMWEはこのようになりますShinyのDTとR:カスタム番号の書式

に通貨記号を変更する場合

library(shiny) 
library(DT) 

shinyApp(
    # UI 
    ui = fluidPage(DT::dataTableOutput('tbl')), 

    # SERVER 
    server = function(input, output) { 
    dat <- data.frame(cur = 1234.5, # supposed to be displayed as: 1,234.50€ | Bad! 
             # displayed as $1,234.5 
         perc = 0.123456, # 12.34% | Good! 
         num = 1000) # 1,000 | Bad! displayed as 1000 

    # render DT 
    output$tbl = DT::renderDataTable(
     datatable(dat) %>% 
     formatCurrency(c('cur'), "$") %>% 
     formatPercentage('perc', 2) %>% 
     formatRound('num', digits = 0) 
    ) 
    } 
) 

それはかなり良い仕事をしていません、しかし、記号が消えます。 "E"のような別の文字を挿入すると、文字は終わりではなく始めに表示されます。さらに、数値には「大きなマーク」はありません。

アイデア?

+2

: 'formatCurrency( 'NUM'、通貨= ""、間隔= 3、マーク= ""、桁= 0)'。ユーロの場合は、 'formatCurrency(c( 'cur')、通貨="€ "、間隔= 3、マーク="、 "、数字= 1)'。私はそれをどうやって得るのかは分かりません。 – Chris

+0

1,000を得る 'formatCurrency'アプローチは良いです! しかし、私はまだ通貨番号の€印を見ません。 '?formatCurrency'の中で提案されている' ''の代わりに '\ U20AC'を使うと同じです。 – David

答えて

2

.jsファイル内の通貨記号の位置は、データテーブルパッケージから変更することができます。

編集DTWidget.formatCurrency機能のラインDTあなたのRのlibrarysのディレクトリに/ htmlwidgets/datatables.jsファイルに

$(thiz.api().cell(row, col).node()).html(currency + markInterval(d, interval, mark)); 

単に

$(thiz.api().cell(row, col).node()).html(markInterval(d, interval, mark) + currency); 

€記号については

formatCurrency(c('cur'), currency = "\U20AC", interval = 3, mark = ",", digits = 2) 

は私のために仕事をして、あなたがしようとしたものをthatsの、あなたは任意のシンボルが表示されませんか?あなたが試みることができる数値については

+0

面白いアプローチ。同じ結果を得たい場合は、ライブラリの方向を他のマシンにコピーする必要がありますか? – David

+1

もちろん、そのライブラリをすべてのマシンにリンクする必要があります。もちろん、そのライブラリだけをサーバー上で実行する必要があります。また、DTパッケージを更新するたびに、コードを調整する必要があります。これはちょっと気分がいいです、https://github.com/rstudio/DTの開発チームにこれを示唆してr通貨記号を整理するオプションを実装することができます。調整が非常に簡単です次のアップデートで取り上げられました。後者の溶液に関して – Sebastian

+1

: 私は 'shinyApp(UI = fluidPage(DT :: dataTableOutput( 'TBL'))、 サーバ=関数(入力、出力){DAT <を入力 - data.frame(CUR = 1234.5) 出力$ tbl = DT :: renderDataTable( datatable(dat)%>% formatCurrency(c( 'cur')、currency = "\ U20AC"、interval = 3、mark = "、"、 digits = 2) ) } ) '私は' digits'が、私はまだ通貨記号が表示されていない 'digits'引数なしで使用されていない引数... するエラーが発生します。 [See here](http://puu.sh/kShhA/0398a4e597.png) – David