问题:如果paste
成为100000
,我该如何使用1e+05
?
如果这个问题看起来很无聊,请提前抱歉(但这导致我的代码中出现了错误)。我使用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(“精确”),在终端中运行R版本2.14.1(2011-12-22)。]
答案 0 :(得分:27)
请参阅?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>
答案 1 :(得分:12)
或者,您可以使用不以科学计数法打印的整数。您可以通过在其后面加上“L”或执行as.integer来指定您的数字是整数。
> paste("abc",100000L)
[1] "abc 100000"
> paste("abc",as.integer(1000000000))
[1] "abc 1000000000"
答案 2 :(得分:9)
或者format
可能比sprintf
更简单,尤其是当您想要更改小数位的显示方式时:
> paste("abc",format(100000, scientific = FALSE))
[1] "abc 100000"
> paste("abc",format(0.1234567, scientific = FALSE, digits = 4))
[1] "abc 0.1235"