2

背景

由于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 包(即不依赖)?

4

2 回答 2

2

有一个光滑的单线,您可以使用它来将数千个逗号分隔符添加到数字的整数位,而无需将它们添加到小数部分。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"

演示

于 2017-10-13T07:02:24.823 回答
0

不幸的是,许多 Renjin 包没有完全实现,所以在修复之前,问题中的代码是一个不错的解决方法:

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 )
}
于 2018-01-03T18:56:22.997 回答