2011-10-06 33 views
6

Tôi gặp sự cố trong làm tròn số trong R. Tôi có dữ liệu sau và tôi muốn làm tròn chúng thành 8 chữ số thập phân.Làm tròn số trong R tới số chữ số được chỉ định

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

Các chữ số này ở dạng số mũ và tôi muốn chuyển đổi chúng thành số hợp lý với 8 chữ số thập phân.

Trả lời

13

Đối với kiểm soát tốt hơn định dạng số, thử formatC()

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

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

Chỉ rút lại là đầu ra là một nhân vật. Vì vậy, as.numeric() như một trình bao bọc cho câu lệnh định dạng thường là cần thiết. – nzcoops

+0

Nhưng bạn không thể kiểm soát cách 'số' được hiển thị. 'as.numeric (formatC (9.50863385275955e-05, format =" f ", digits = 8))' hiển thị dưới dạng '9,509e-05' trên hệ thống của tôi, rõ ràng không phải là thứ mong muốn. –

+2

@MichaelHoffman - bạn có thể thay đổi hành vi này bằng 'tùy chọn (scipen = XXX)' trong đó số lớn hơn cho XXX in nhiều số thập phân hơn. – Chase

5

Chức năng signif viên đạn cho một số cụ thể của chữ số có nghĩa (và round chức năng viên đạn cho một số cụ thể của số thập phân).

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

Lưu ý rằng in kết quả phụ thuộc vào một lựa chọn, options(digits=7) ... Bạn cũng có thể trực tiếp xác định digits lập luận để print:

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

Dưới đây là một ví dụ minh họa sự khác biệt giữa signifround:

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 
Các vấn đề liên quan