试图使用向量中的值创建整数序列,seq =(x1:y1,x2:y2,x3:y3 ... xn:yn)其中(x1 我尝试创建条件if语句和for循环,都没有结果。 通常,我就够了 但是,当n具有(或多或少)随机长度时,就会出现困难。尝试使用for循环,即 澄清我正在寻找 类似地,if / while语句实际上不执行任何操作
有什么建议么?谢谢x <- c(1, 10, 26, 40)
y <- c(5, 13, 30, 51)
seqq <- c(seq(x1,y1,1),seq(x2,y2,1)...)
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)
答案 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]))