Shiny 和 R 中的 DT:自定义数字格式
Posted
技术标签:
【中文标题】Shiny 和 R 中的 DT:自定义数字格式【英文标题】:DT in Shiny and R: Custom number formatting 【发布时间】:2016-01-15 06:05:31 【问题描述】:我有一个使用 DT
-package 显示数据表的闪亮应用程序。我想要的是能够以自定义方式格式化列。例如,我希望货币值显示如下:1,234.50€ 而不是 DT
-way,它显示为 $1,234.5(注意符号的变化、货币符号的位置以及数字小数点后)。
MWE 如下所示:
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”这样的另一个字符时,该字符仍然显示在开头而不是结尾。此外,数值不会得到“大标记”。
有什么想法吗?
【问题讨论】:
对于数字,您可以尝试:formatCurrency('num', currency = "", interval = 3, mark = ",", digits = 0)
。对于欧元,formatCurrency(c('cur'), currency = "€", interval = 3, mark = ",", digits = 1)
。不过我不知道怎么把它放在右边
formatCurrency
-获得 1,000 的方法很好!但是,我仍然没有看到货币编号的欧元符号。如果我按照?formatCurrency
中的建议使用\U20AC
而不是€
,则同样适用
【参考方案1】:
您可以更改数据表包中 .js 文件中货币符号的位置。
编辑DTWidget.formatCurrency函数的行
$(thiz.api().cell(row, col).node()).html(currency + markInterval(d, interval, mark));
简单的
$(thiz.api().cell(row, col).node()).html(markInterval(d, interval, mark) + currency);
在 R 库目录中的 DT/htmlwidgets/datatables.js 文件中。
至于€符号,
formatCurrency(c('cur'), currency = "\U20AC", interval = 3, mark = ",", digits = 2)
对我有用,这就是你尝试过的,但你没有看到任何符号?
【讨论】:
有趣的方法。如果我想获得相同的结果,我必须将库方向复制到其他机器吗? 是的,您必须将该库链接到每台机器,当然只能在服务器上运行该库。此外,在每次 DT 包更新后,您都必须调整代码。所以这有点花哨,你可以在github.com/rstudio/DT 上向开发团队建议这个,以便在 r 代码中实现一个选项来排列货币符号,因为这很容易调整,它可能会在下一次更新中被采纳。 关于后一种解决方案:当我输入shinyApp(ui = fluidPage(DT::dataTableOutput('tbl')), server = function(input, output) dat <- data.frame(cur = 1234.5) output$tbl = DT::renderDataTable( datatable(dat) %>% formatCurrency(c('cur'), currency = "\U20AC", interval = 3, mark = ",", digits = 2) ) )
时,我收到一个错误,digits
是一个未使用的参数...没有digits
参数我仍然看不到货币象征。 See Here
嗯,这有点奇怪,你的代码在我的 windows 机器和 ubuntu 服务器上运行良好。我的包版本是 dplyr_0.4.2 DT_0.1.34 shiny_0.12.2 和 R 版本 3.2.2,也许你必须更新你的包? (使用 sessionInfo() 检查您加载的版本)
仍然没有€符号。我怀疑它与我的机器而不是 R 代码有关...无论如何谢谢!以上是关于Shiny 和 R 中的 DT:自定义数字格式的主要内容,如果未能解决你的问题,请参考以下文章
R Shiny DT::renderDataTable ...如何在下载的表格中自定义标题
如何在Shiny R中丢弃DT :: datatable上的用户编辑