【问题标题】:Generate sequence between each element of 2 vectors在 2 个向量的每个元素之间生成序列
【发布时间】:2015-08-27 14:16:30
【问题描述】:

我有一个 for 循环,每次生成 2 个相同长度的向量(每次迭代的长度可能不同),例如:

>aa  
[1] 3 5  

>bb  
[1] 4 8

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

>zz  
[1] 3 4 5 6 7 8

R 中有一个函数可以创建它吗?

【问题讨论】:

  • 您对aa<-1:2bb<-4:5 有什么期望? c(1,2,4,5)1:5?

标签: r


【解决方案1】:

我们可以使用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)

【讨论】:

    【解决方案2】:

    可以通过使用冒号运算符: 来获取序列,该运算符将序列的开头与结尾分开。我们可以为每个向量定义这样的序列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)
    

    【讨论】:

      【解决方案3】:

      根据您想要的输出,这里有更多的选择:

      > 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-03
        • 2012-11-08
        • 1970-01-01
        • 1970-01-01
        • 2012-09-06
        相关资源
        最近更新 更多