2011-10-06 8 views
6

R'de sayıları yuvarlarken bir sorunum var. Aşağıdaki verilere sahibim ve bunları 8 ondalık basamağa yuvarlamak istiyorum.R sayılarını belirtilen basamak sayısına yuvarlama

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")) 

Bu rakam üs şeklindedir ve ben 8 ondalık basamaklı rasyonel sayılara dönüştürmek istiyoruz.

cevap

13

numaralarının biçimlendirme üzerinde iyi kontrol sağlamak için, formatC()

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

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

Yalnızca geri çekmek çıkıştır bir karakter. Biçim ifadesine bir sarıcı olarak as.numeric() genellikle gerekli. – nzcoops

+0

Ancak, sayısalların nasıl görüntülendiğini kontrol edemezsiniz. 'as.numeric (formatC (9.50863385275955e-05, format =" f ", dijit = 8))' sistemimde 9.509e-05 'olarak görünüyor, ki bu açıkça istenen bir şey değil. –

+2

@MichaelHoffman - Bu davranışı, XXX için daha büyük sayıların daha fazla ondalık basamağı olduğu seçenekler (scipen = XXX) 'ile değiştirebilirsiniz. – Chase

5

signif fonksiyonu anlamlı basamak belirli bir sayıda yuvarlar (ve round fonksiyon ondalık belirli bir sayıda yuvarlar) deneyin. Sonuç bir seçenek, options(digits=7) bağlıdır baskı ... Ayrıca doğrudan belirtebilirsiniz

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

Not olduğunu digits argüman print için:

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

signif arasındaki farkı gösteren bir örnek 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