在2个向量的每个元素之间生成序列

时间:2015-08-27 14:16:31

标签: r

我有一个for循环,每次生成2个相同长度的矢量(长度可以因每次迭代而变化),例如:

>aa  
[1] 3 5  

>bb  
[1] 4 8

我想使用这些向量的每个元素创建一个序列来获得:

>zz  
[1] 3 4 5 6 7 8

R中有功能可以创建吗?

3 个答案:

答案 0 :(得分:3)

我们可以使用Map来获取' aa'的相应元素的序列。 ,' bb'。输出为list,因此我们unlist获得vector

unlist(Map(`:`, aa, bb))
#[1] 3 4 5 6 7 8

数据

aa <- c(3,5)
bb <- c(4, 8)

答案 1 :(得分:1)

可以使用冒号运算符:来获取序列,该运算符将序列的开头与结尾分开。我们可以为每个向量定义此类序列aabb,并将结果与​​c()连接成一系列数字。

为避免重叠范围内的双重输入,我们可以使用unique()函数:

zz <- unique(c(aa[1]:aa[length(aa)],bb[1]:bb[length(bb)]))
#> zz
#[1] 3 4 5 6 7 8

aa <- c(3,5)
bb <- c(4,8)

答案 2 :(得分:1)

根据您所需的输出,这里有一些替代方案:

> do.call("seq",as.list(range(aa,bb)))
[1] 3 4 5 6 7 8

> Reduce(seq,range(aa,bb)) #all credit due to @BrodieG
[1] 3 4 5 6 7 8

> min(aa,bb):max(aa,bb)
[1] 3 4 5 6 7 8