由于bug in Renjin,format
系列功能不可用,但sprintf
工作。
这是一个替换函数,它将数字转换为逗号分隔的字符串:
commas <- function( n ) {
s <- sprintf( "%03.0f", n %% 1000 )
n <- n %/% 1000
while( n > 0 ) {
s <- concat( sprintf( "%03.0f", n %% 1000 ), ',', s )
n <- n %/% 1000
}
gsub( '^0*', '', s )
}
虽然代码完成了工作,但如何加快实施?也就是说,如何编写代码以便使用R语言(不使用format
,formatC
,prettyNum
等)并且没有破坏Renjin packages(即没有依赖关系)?
有一个光滑的单行程序,您可以使用它将数千个逗号分隔符添加到数字的整数位,而不将它们添加到小数部分。使用str_replace_all
包中的stringr
,我们可以使用:
num <- "1234567890.12345"
str_replace_all(num, "[0-9](?=(?:[0-9]{3})+(?![0-9])(?=\\.))", "\\0,")
[1] "1,234,567,890.12345"
不幸的是,许多人人包都没有完全实现,所以在修复到位之前,问题中的代码是一个体面的工作:
commas <- function( n ) {
s <- sprintf( "%03.0f", n %% 1000 )
n <- n %/% 1000
while( n > 0 ) {
s <- concat( sprintf( "%03.0f", n %% 1000 ), ',', s )
n <- n %/% 1000
}
gsub( '^0*', '', s )
}