27

问题:我怎样才能使用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)。]

4

3 回答 3

30

?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> 
于 2012-11-27T03:26:25.140 回答
14

或者,您可以使用不以科学计数法打印的整数。你可以指定你的数字是一个整数,方法是在它后面加上一个“L”,或者做 as.integer。

> paste("abc",100000L)
[1] "abc 100000"
> paste("abc",as.integer(1000000000))
[1] "abc 1000000000"
于 2012-11-27T08:45:11.633 回答
10

或者format可能比sprintf特别是当您想要更改小数的显示方式时更简单:

> paste("abc",format(100000, scientific = FALSE))
[1] "abc 100000"
> paste("abc",format(0.1234567, scientific = FALSE, digits = 4))
[1] "abc 0.1235"
于 2015-04-09T22:22:36.367 回答