问 :我如何使用paste
而不100000
变得1e+05
?
提前很抱歉,如果这个问题显得轻佻(但它导致了我的代码中的bug)。 我用R调用外部脚本,所以当我说,例如paste("abc",100000)
我希望它输出"abc 100000"
,而不是"abc 1e+05"
。
下面是它看起来像我的屏幕上的实例:
> paste("abc",100000)
[1] "abc 1e+05"
> paste("abc",100001)
[1] "abc 100001"
这导致我的脚本适用于输入“100001”,而不是“100000”的怪异行为。
我知道我可以创建一个脚本,以数字转换为字符串,但是我很喜欢,但我觉得我不应该这样做,如果有做同样的事情,一个内部的方式(我怀疑有一些“方法”我失去了) 。
[如果有帮助,我在Ubuntu 12.04.1 LTS( “精确的”),在终端运行v版本2.14.1(2011-12-22)。]
见?options
,特别scipen
:
R> paste("abc", 100000)
[1] "abc 1e+05"
R> options("scipen"=10) # set high penalty for scientific display
R> paste("abc", 100000)
[1] "abc 100000"
R>
另外,通过控制格式化紧紧老派方式sprintf()
R> sprintf("%s %6d", "abc", 100000)
[1] "abc 100000"
R>
或者,你可以使用没有得到印在科学记数法的整数。 你可以指定你的电话号码是把一个“L”背后,或做as.integer整数。
> paste("abc",100000L)
[1] "abc 100000"
> paste("abc",as.integer(1000000000))
[1] "abc 1000000000"
或者format
可能会比简单sprintf
尤其是当你想改变小数的显示方式:
> paste("abc",format(100000, scientific = FALSE))
[1] "abc 100000"
> paste("abc",format(0.1234567, scientific = FALSE, digits = 4))
[1] "abc 0.1235"