生成可能为空的整数序列的最佳方法是什么?

时间:2015-10-20 11:30:03

标签: r

seq(n,m)无法生成空序列, 因为序列seq(n,m)中的步骤方向从向上切换到向下 当m小于n时:

  • seq(1,2)有两个要素:1,2
  • seq(1,1)有一个元素:1
  • seq(1,0)有两个元素:1,0。

不幸的是seq没有可选的参数来强制执行步骤的方向。 我已经在R包中发现了两个错误,其中seq(1,n)(或1:n)意味着 所有正整数的序列小于或等于n,但n可能为0。 目前我的权宜之计是像

这样难看的结构
 ifelse(n>=1,seq(1,n),integer(0))

 seq(1,length.out=max(n,0))

或者,如果n至少是非负的,

 seq(0,n)[-1]

乍一看,第一眼看起来并不那么糟糕,但如果n是一个更长的表达,他们就会这样做。 如果n为否定,则最后一个不起作用:

> n <- -3
> seq(0,n)[-1]
[1] -1 -2 -3

有没有更好的想法来生成可能为空的整数序列?

1 个答案:

答案 0 :(得分:0)

如果您对for循环在R中的工作方式不满意,可能您更喜欢使用迭代器包的foreach循环:

library(iterators)
library(foreach)

foreach(i = icount(3), .combine = "c") %do% {i}
#[1] 1 2 3
foreach(i = icount(-3), .combine = "c") %do% {i}
#NULL
foreach(i = icount(0), .combine = "c") %do% {i}
#NULL