Построение последовательности, создающее пустую последовательность, если нижняя больше верхней границы

Не раз «сообразительность» функции R seqсильно поразила меня в угловом случае, когда нижний == верхний - 1:

> 1:0
[1] 1 0
> seq(1, 0)
[1] 1 0
> seq(1, 0, 1)
Error in seq.default(1, 0, 1) : wrong sign in 'by' argument

Я не спрашиваю о причинах этого странного поведения - я предполагаю, что теперь это просто наследие, с которым мы должны жить. Вместо этого я хотел бы знать, реализует ли какой-либо пакет оператор seq, который возвращает пустую последовательность в этом случае, например:

safe.seq.int <- function(from, to, by=1) {
  if (from > to) integer(0) else seq.int(from, to, by)
}

> safe.seq.int(1, 0)
integer(0)
10
задан krlmlr 7 March 2014 в 13:46
поделиться