Jeśli chcesz zaokrąglić w górę do najbliższej potęgi 10, po prostu zdefiniuj:
roundUp <- function(x) 10^ceiling(log10(x))
Działa to również, gdy x jest wektorem:
> roundUp(c(0.0023, 3.99, 10, 1003))
[1] 1e-02 1e+01 1e+01 1e+04
..ale jeśli chcesz zaokrąglić do „ładnej” liczby, musisz najpierw zdefiniować, czym jest „ładna” liczba. Poniższy opis pozwala nam zdefiniować „ładny” jako wektor z ładnymi wartościami bazowymi od 1 do 10. Domyślnie jest to liczba parzysta plus 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]]]]
}
Powyższe nie działa, gdy x jest wektorem - teraz za późno wieczorem :)
> 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
[[EDYTOWAĆ]]
Jeśli pytanie brzmi, jak zaokrąglić do określonej najbliższej wartości (np. 10 lub 100), odpowiedź Jamesa wydaje się najbardziej odpowiednia. W mojej wersji możesz wziąć dowolną wartość i automatycznie zaokrąglić ją do rozsądnie „ładnej” wartości. Oto kilka innych dobrych opcji powyższego „ładnego” wektora:1:10, c(1,5,10), seq(1, 10, 0.1)
Jeśli na przykład masz zakres wartości na swoim wykresie, [3996.225, 40001.893]
wówczas sposób automatyczny powinien uwzględniać zarówno rozmiar zakresu, jak i wielkość liczb. Jak zauważył Hadley , pretty()
funkcja może być tym, czego chcesz.