R опустить последний элемент в последовательности - PullRequest
4 голосов
/ 10 июля 2020

Когда нам нужна последовательность в R, мы используем любую конструкцию:

> 1:5
[1] 1 2 3 4 5
> seq(1,5)
[1] 1 2 3 4 5

это создает последовательность от начала до остановки (включительно), есть ли способ сгенерировать последовательность от начала до конца (исключая )? например,

[1] 1 2 3 4 

Кроме того, я не хочу использовать обходной путь, такой как оператор минус, например:

seq(1,5-1)

Это потому, что я хотел бы иметь в моем коде инструкции, которые элегантны и лаконичны. В моем реальном примере start и stop - это не жестко запрограммированные целые числа, а описательные имена переменных. Используя конструкцию variable_name -1, мой скрипт уродливее и труднее читается для обозревателя.

PS: Разница между этим вопросом и вопросом на удалить последний элемент вектора состоит в том, что Я прошу генерацию последовательности, в то время как первая направлена ​​на удаление последнего элемента вектора. Более того, приведенные здесь ответы различны и относятся к моей проблеме

Ответы [ 2 ]

3 голосов
/ 10 июля 2020

Одно из возможных решений:

head(1:5, -1)
# [1] 1 2 3 4

или вы можете определить свою собственную функцию

seq_last_exclusive <- function(x) return(x[-length(x)])
seq_last_exclusive(1:5)
# [1] 1 2 3 4
1 голос
/ 12 июля 2020

Мы можем использовать следующую функцию

f <- function(start, stop, ...) {
  seq.int(from = start, to = stop - 1L, ...)
  }

Test

f(1, 5)
# [1] 1 2 3 4

Она должна быть достаточно эффективной, потому что мы не генерируем последовательность 1:5, а затем подмножествуем ее.

...