我有一个for循环,每次生成2个相同长度的矢量(长度可以因每次迭代而变化),例如:
>aa
[1] 3 5
>bb
[1] 4 8
我想使用这些向量的每个元素创建一个序列来获得:
>zz
[1] 3 4 5 6 7 8
R中有功能可以创建吗?
答案 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)
可以使用冒号运算符:
来获取序列,该运算符将序列的开头与结尾分开。我们可以为每个向量定义此类序列aa
和bb
,并将结果与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