x <- c(0.8992877, 0.023, -1.002, 1.236, 10.236000, 20.243, 10035.23)
x[1] 0.8992877 0.0230000 -1.0020000 1.2360000 10.2360000 20.2430000 10035.2300000
Bài viết này làm rõ hơn cách làm tròn số trong R ở video CÁCH LÀM TRÒN SỐ TRONG R | Lệnh round(), signif() trong chuyên đề 1 Coding in R.
Giả sử bạn có vector x như sau. Khi in ra console thì mặc định sẽ có giá trị rất dài như bên dưới vì mặc định digits = 7 và scipen = 0 trong R đã thiết lập format khi in ra con số (numeric) có số lượng số sau dấu thập phân như vậy.
x <- c(0.8992877, 0.023, -1.002, 1.236, 10.236000, 20.243, 10035.23)
x[1] 0.8992877 0.0230000 -1.0020000 1.2360000 10.2360000 20.2430000 10035.2300000
Bây giờ bạn muốn thu được vector numeric x chỉ gồm các con số có 2 số sau dấu thập phân thì ta sẽ áp dụng 1 trong các cách sau.
Cách 1: Sử dụng function round() trong base R, kết quả thu được là numeric vector
round(x, digits = 2) -> x_1
x_1[1] 0.90 0.02 -1.00 1.24 10.24 20.24 10035.23
Cách 2: Sử dụng function sprintf() trong base R, kết quả là character vector do đó cần convert qua vector numeric nếu cần dùng để tính toán tiếp theo.
sprintf("%.2f", x) -> x_2
x_2[1] "0.90" "0.02" "-1.00" "1.24" "10.24" "20.24" "10035.23"
as.numeric(x_2) ## convert qua dạng numeric vector[1] 0.90 0.02 -1.00 1.24 10.24 20.24 10035.23
Cách 3: Sử dụng function myround() trong package broman, kết quả là character vector
library(broman)
broman::myround(x, digits = 2) -> x_3
x_3[1] "0.90" "0.02" "-1.00" "1.24" "10.24" "20.24" "10035.23"
as.numeric(x_3) ## convert qua dạng numeric vector[1] 0.90 0.02 -1.00 1.24 10.24 20.24 10035.23
Cả 3 cách này đều thu được kết quả y chang nhau.
identical(x_1, as.numeric(x_2))[1] TRUE
identical(x_1, as.numeric(x_3))[1] TRUE
identical(as.numeric(x_2), as.numeric(x_3))[1] TRUE