Jika Anda hanya ingin membulatkan ke pangkat 10 terdekat, maka tentukan saja:
roundUp <- function(x) 10^ceiling(log10(x))
Ini sebenarnya juga berfungsi ketika x adalah vektor:
> roundUp(c(0.0023, 3.99, 10, 1003))
[1] 1e-02 1e+01 1e+01 1e+04
..tetapi jika Anda ingin membulatkan ke angka yang "bagus", Anda harus terlebih dahulu menentukan apa itu angka yang "bagus". Berikut ini memungkinkan kita mendefinisikan "bagus" sebagai vektor dengan nilai dasar yang bagus dari 1 sampai 10. Defaultnya disetel ke bilangan genap ditambah 5.
roundUpNice <- function(x, nice=c(1,2,4,5,6,8,10)) {
if(length(x) != 1) stop("'x' must be of length 1")
10^floor(log10(x)) * nice[[which(x <= 10^floor(log10(x)) * nice)[[1]]]]
}
Di atas tidak berfungsi ketika x adalah vektor - sekarang sudah larut malam :)
> roundUpNice(0.0322)
[1] 0.04
> roundUpNice(3.22)
[1] 4
> roundUpNice(32.2)
[1] 40
> roundUpNice(42.2)
[1] 50
> roundUpNice(422.2)
[1] 500
[[EDIT]]
Jika pertanyaannya adalah bagaimana membulatkan ke nilai terdekat yang ditentukan (seperti 10 atau 100), maka jawaban Yakobus tampaknya paling tepat. Versi saya memungkinkan Anda mengambil nilai apa pun dan secara otomatis membulatkannya ke nilai yang cukup "bagus". Beberapa pilihan bagus lainnya dari vektor "bagus" di atas adalah:1:10, c(1,5,10), seq(1, 10, 0.1)
Jika Anda memiliki rentang nilai dalam plot Anda, misalnya [3996.225, 40001.893]
, cara otomatis harus mempertimbangkan ukuran rentang dan besarnya angkanya. Dan seperti yang dicatat oleh Hadley , pretty()
fungsinya mungkin sesuai dengan keinginan Anda.