R:使用向量点和for循环从序列生成Seq

时间:2019-04-24 15:19:32

标签: r seq

试图使用向量中的值创建整数序列,seq =(x1:y1,x2:y2,x3:y3 ... xn:yn)其中(x1

我尝试创建条件if语句和for循环,都没有结果。

x <- c(1, 10, 26, 40)
y <- c(5, 13, 30, 51)

通常,我就够了

seqq <- c(seq(x1,y1,1),seq(x2,y2,1)...) 

但是,当n具有(或多或少)随机长度时,就会出现困难。尝试使用for循环,即

seqq <- c()

for (i in 1:length(x)){
    seqq[i] <- seq(x[i], y[i],1)  #I know this would technically create a vector of sequences
  i <- i+1
}

#results in
Error in seq.default(x[i], y[i], 1) : 'from' must be a finite number

澄清我正在寻找

seqq <- c(1,2,3,4,5,10,11,12,13,26,27,28,29,30,40,...,51)

类似地,if / while语句实际上不执行任何操作 有什么建议么?谢谢

1 个答案:

答案 0 :(得分:2)

我们可以使用Map来获取'x'和'y'的相应元素之间的顺序,然后使用unlist list s的vector

unlist(Map(`:`, x, y))
#[1]  1  2  3  4  5 10 11 12 13 26 27 28 29 30 40 41 42 43 44 45 46 47 48 49 50 51

tidyverse类似的选择是

library(tidyverse)
map2(x, y, `:`) %>% 
       flatten_int

注意:我们也可以将:更改为seq,并且应该也可以正常工作。默认情况下,by是1。如果我们需要生成具有不同by

的序列,那将是更通用的

关于带有for循环的OP的问题,seqq被定义为NULL向量。因此,如果我们执行seqq[i],则没有索引元素。在这种情况下,最好在每次迭代中串联(c并将其分配给'seqq',这样向量的大小会增加,并在每次迭代末尾附加每次迭代的值

for(i in seq_along(x)) seqq <- c(seqq, seq(x[i], y[i]))