2012-11-27 71 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" 
相關問題