如果不缩短到1e + 05,我怎么能粘贴100000?

时间:2012-11-27 03:24:22

标签: r r-faq

问题:如果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)。]

3 个答案:

答案 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"