以科学记数法保持格式宽度

时间:2013-08-06 01:34:19

标签: r formatting pretty-print

我正在编写一个自定义print.xx函数,以显示一组非常表格的数据。 列宽为11个字符,所以我这样做:

> format(1234.567,width=11,digits=7)
[1] "   1234.567"
> format(1234.56789,width=11,digits=7)
[1] "   1234.568"

到目前为止一切顺利。当我有一个非常大/小的数字并且科学记数出现时,问题出现了:

> format(1234.56789e10,width=11,digits=7)
[1] "1.234568e+13"
> format(1234.56789e-10,width=11,digits=7)
[1] "1.234568e-07"

它应该使用科学记数法,好吧,但我需要它坚持11个字符的宽度。我查找了scientificscipen参数,但仍然超出了11个字符的限制。一个选项可能是检查是否生成科学记数法,如果是,则减少digits参数,但看起来很俗气。

我怎么能强迫它给我一个固定长度的字符串,无论数字是否是科学记数法?

3 个答案:

答案 0 :(得分:6)

我认为你必须适当地计算数字..也许这样的事情会起作用:

n <- 1234.567e2
prettyNum(n, digits=7-(nchar(n)-11), width=11, format="fg")
# [1] "   123456.7"

n <- 1234.567e9
prettyNum(n, digits=7-(nchar(n)-11), width=11, format="fg")
# [1] "1.23457e+12"

n <- 1234.567e100
prettyNum(n, digits=7-(nchar(n)-11), width=11, format="fg")
# [1] "1.2346e+103"

或等同于format

format(n, digits=7-(nchar(n)-11), width=11)

答案 1 :(得分:4)

就我而言,我用过:

  

的sprintf( “%11.5e”,123456789e10)

     

[1]“1.23457e + 18”

你只需要知道你想要多少个字符,并在width.decimal之间取得正确的平衡,即%11.5e

答案 2 :(得分:0)

> sprintf("%0.6g", 1234.56789e-10)
[1] "1.23457e-07"
> sprintf("%0.6g", 1234.56789e10)
[1] "1.23457e+13"