R: равные пробелы в интервале, но не включают конечные точки - PullRequest
0 голосов
/ 30 января 2019

Предположим, что я хочу сгенерировать точки с равными интервалами в интервале в R, я обнаружил, что функция seq сделает это, но результаты отображаются как:

seq(0, 1, length.out = 10)
[1] 0.0000000 0.1111111 0.2222222 0.3333333 0.4444444 0.5555556 0.6666667
[8] 0.7777778 0.8888889 1.0000000

Если мы хотим сгенерировать 0.1, 0.2,...,0.9, 1.0 как я могу включить одну конечную точку, а не другую?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Другой вариант, аналогичный ответу @ duckmayr с дополнительным аргументом aligned

fun <- function(minimum, maximum, length_out, aligned = c("left", "right")) {
  type <- match.arg(aligned)
  step <- maximum / length_out

  if(type == "left") {
    seq(minimum, right - step, length.out = length_out)
  } else {
    seq(minimum + step, right, length.out = length_out)
  }
}

fun(0, 1, 10) # default is "left"
# [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

fun(0, 1, 10, "right")
# [1] 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

fun(0, 1, 10, "abc")

ошибка в match.arg (выровненный): «arg» должно быть одним из «left», «прямо »

0 голосов
/ 31 января 2019

Вы могли бы сделать это программно с помощью чего-то подобного:

f <- function(from, to, length.out) {
    length.out <- length.out + 1
    result <- seq(from, to, length.out = length.out)
    result <- result[-1]
    return(result)
}

f(0, 1, 10)
# [1] 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

Идея состоит в том, что мы сделаем последовательность с длиной на единицу больше, чем вы на самом деле хотите;это будет расставлять элементы так, как вы хотите, а затем мы просто отбрасываем нежелательный начальный элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...