2012-11-27 37 views
20

问题:我如何使用paste没有100000成为1e+05如何在不缩短为1e + 05的情况下粘贴100000?

对不起提前,如果这个问题显得轻佻(但它导致了我的代码中的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)。]

回答

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> 
+0

或者只是把引号中的“100000”太... – neilfws

11

或者,你可以使用整数其中别用科学记数法打印。你可以指定你的电话号码是把一个“L”背后,或做as.integer整数。

> paste("abc",100000L) 
[1] "abc 100000" 
> paste("abc",as.integer(1000000000)) 
[1] "abc 1000000000" 
6

或者尤其是当你想改变小数的显示方式format可能比sprintf简单:

> paste("abc",format(100000, scientific = FALSE)) 
[1] "abc 100000" 
> paste("abc",format(0.1234567, scientific = FALSE, digits = 4)) 
[1] "abc 0.1235" 
相关问题