R:使用矢量点和循环从序列生成Seq [重复]

问题描述 投票:1回答:1

想要使用来自向量的值创建整数序列,seq =(x1:y1,x2:y2,x3:y3 ... xn:yn)其中(x1 <y1 <x2 <y2 ... xn <yn)。它变得困难,因为n是随机的但总是取整数值。

我已经尝试创建一个条件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)

同样,如果/ while语句实际上没有做任何建议?谢谢

r seq
1个回答
2
投票

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

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的序列,那将更加通用


关于OP与for循环的问题,seqq被定义为NULL向量。所以,如果我们做seqq[i],就没有要索引的元素。在这种情况下,最好在每次迭代中连接(c)并将其分配给'seqq',这样向量的大小会增加,并在每个迭代的末尾附加值

for(i in seq_along(x)) seqq <- c(seqq, seq(x[i], y[i]))
© www.soinside.com 2019 - 2024. All rights reserved.