Якщо ви просто хочете округлити до найближчого рівня 10, тоді просто визначте:
roundUp <- function(x) 10^ceiling(log10(x))
Це насправді також працює, коли х є вектором:
> roundUp(c(0.0023, 3.99, 10, 1003))
[1] 1e-02 1e+01 1e+01 1e+04
..але якщо ви хочете округлити до "приємного" числа, спочатку потрібно визначити, що таке "приємне" число. Далі ми можемо визначити "nice" як вектор із приємними базовими значеннями від 1 до 10. За замовчуванням встановлено парні числа плюс 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]]]]
}
Вищевказане не працює, коли х є вектором - зараз пізно ввечері :)
> 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
[[РЕДАКТУВАТИ]]
Якщо питання полягає в тому, як округлити до заданого найближчого значення (наприклад, 10 або 100), то Джеймс відповідь видається найбільш доречною. Моя версія дозволяє взяти будь-яке значення та автоматично округлити його до досить "гарного" значення. Деякі інші вдалі варіанти "приємного" вектора:1:10, c(1,5,10), seq(1, 10, 0.1)
Наприклад, якщо у вашому графіку є діапазон значень, наприклад, [3996.225, 40001.893]
тоді автоматичний спосіб повинен враховувати як розмір діапазону, так і величину чисел. І як зазначав Хедлі , pretty()
функція може бути такою, як ви хочете.