Если вы просто хотите округлить до ближайшей степени 10, просто определите:
roundUp <- function(x) 10^ceiling(log10(x))
На самом деле это также работает, когда x - вектор:
> roundUp(c(0.0023, 3.99, 10, 1003))
[1] 1e-02 1e+01 1e+01 1e+04
..но если вы хотите округлить до "хорошего" числа, вам сначала нужно определить, что такое "хорошее" число. Следующее позволяет нам определить «хороший» как вектор с хорошими базовыми значениями от 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]]]]
}
Вышеупомянутое не работает, когда x - вектор - слишком поздно вечером прямо сейчас :)
> 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()
функция может быть такой, какой вы хотите.