En yakın 10 kuvvetine yuvarlamak istiyorsanız, o zaman şunu tanımlayın:
roundUp <- function(x) 10^ceiling(log10(x))
Bu aslında x bir vektör olduğunda da işe yarar:
> roundUp(c(0.0023, 3.99, 10, 1003))
[1] 1e-02 1e+01 1e+01 1e+04
..ama "güzel" bir sayıya yuvarlamak istiyorsanız, önce "güzel" sayının ne olduğunu tanımlamanız gerekir. Aşağıdaki, "güzel" i 1'den 10'a kadar güzel temel değerlere sahip bir vektör olarak tanımlamamıza izin verir. Varsayılan, çift sayılar artı 5'e ayarlanmıştır.
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]]]]
}
Yukarıdakiler x bir vektör olduğunda çalışmaz - şu anda akşam çok geç :)
> 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
[[DÜZENLE]]
Soru, belirli bir en yakın değere nasıl yuvarlanacağı ise (10 veya 100 gibi), James cevabı en uygun gibi görünüyor. Benim versiyonum herhangi bir değeri alıp otomatik olarak makul bir şekilde "hoş" bir değere yuvarlamanıza izin veriyor. Yukarıdaki "güzel" vektörün diğer bazı iyi seçimleri şunlardır:1:10, c(1,5,10), seq(1, 10, 0.1)
Örneğin grafiğinizde bir dizi değeriniz [3996.225, 40001.893]
varsa, otomatik yöntem hem aralığın boyutunu hem de sayıların büyüklüğünü hesaba katmalıdır. Ve Hadley'in belirttiği gibi , pretty()
işlev istediğiniz şey olabilir.