2011-10-06 104 views
6

我在R舍入數字時遇到了問題。我有以下數據,我想將它們舍入爲8位十進制數字。將R中的數字舍入爲指定的位數

structure(c(9.50863385275955e-05, 4.05702267762077e-06, 2.78921491976249e-05, 
8.9107773737659e-05, 5.0672643927135e-06, 5.87776809485182e-05, 
2.76421630542694e-05, 5.51662570625727e-05, 2.52790624570593e-05, 
2.00407457671806e-05, 8.33373482160056e-05, 7.8297940825207e-05, 
2.00407457671806e-05, 8.33373482160056e-05, 7.8297940825207e-05, 
2.00407457671806e-05, 8.33373482160056e-05, 7.8297940825207e-05 
), .Names = c("CC/CC", "TT/CC", "CT/CC", "NC/CC", "CC/TT", "TT/TT", 
"CT/TT", "NC/TT", "CC/CT", "TT/CT", "CT/CT", "NC/CT")) 

這些數字是指數形式,我想將它們轉換爲8位小數的有理數。

回答

13

在過去的數的格式精細控制,儘量formatC()

res <- structure(c(9.50863385275955e-05, 4.05702267762077e-06), 
       .Names = c("CC/CC", "TT/CC")) 

formatC(res, format="f", digits=8) 
+0

只有退回是輸出是 一個人物。所以as.numeric()作爲格式語句的包裝通常是需要的。 – nzcoops

+0

但是你無法控制'數字'的顯示方式。 'as.numeric(formatC(9.50863385275955e-05,format =「f」,digits = 8))'在我的系統上顯示爲'9.509e-05',這顯然不是我們想要的。 –

+2

@MichaelHoffman - 你可以用'options(scipen = XXX)'來改變這種行爲,其中XXX的較大數字打印更多小數。 – Chase

5

signif功能四捨五入到的顯著數字的具體數量(和round功能四捨五入至小數點後一個特定的號碼)。

res <- structure(c(9.50863385275955e-05, 4.05702267762077e-06), 
      .Names = c("CC/CC", "TT/CC")) 
signif(res, digits=8) 

注意打印結果取決於一個選項,options(digits=7) ...您也可以直接指定digits參數print

print(pi, digits=3) # 3.14 
print(pi, digits=17) # 3.1415926535897931 

這裏的說明signif之間的差異的例子round

x <- c(pi, pi*1000, pi/1000) 
round(x, 3) # 3.142 3141.593 0.003 
signif(x, 3) # 3.14e+00 3.14e+03 3.14e-03