R 创建由'定义的整数序列;从';和';至';载体

R 创建由'定义的整数序列;从';和';至';载体,r,vectorization,sequence,R,Vectorization,Sequence,我有两个向量定义开始(起始)索引和结束(结束)索引: 我想创建沿两个向量的所有Start:Finish序列的列表,即生成序列Start[1]:Finish[1](1:9)开始[2]:完成[2],依此类推 ## [[1]] ## [1] 1 2 3 4 5 6 7 8 9 ## ## [[2]] ## [1] 10 11 12 13 14 15 16 17 18 19 ## ## [[3]] ## [1] 20 21 22 23 24 25 26 27 28 29 30 最好是以某种矢量

我有两个向量定义开始(起始)索引和结束(结束)索引:

我想创建沿两个向量的所有
Start:Finish
序列的列表,即生成序列
Start[1]:Finish[1]
1:9
)<代码>开始[2]:完成[2],依此类推

## [[1]]
## [1] 1 2 3 4 5 6 7 8 9
## 
## [[2]]
##  [1] 10 11 12 13 14 15 16 17 18 19
## 
## [[3]]
##  [1] 20 21 22 23 24 25 26 27 28 29 30

最好是以某种矢量化的方式。“开始”向量中的值将始终大于“完成”向量中的相应元素。

只需使用
mapply

Start = c(1,10,20)
Finish = c(9,19,30)
mapply(":", Start, Finish)
## [[1]]
## [1] 1 2 3 4 5 6 7 8 9
## 
## [[2]]
##  [1] 10 11 12 13 14 15 16 17 18 19
## 
## [[3]]
##  [1] 20 21 22 23 24 25 26 27 28 29 30
## 
当然,您也可以使用
Vectorize
,但这只是
mapply
的包装。但是,
Vectorize
不能与基本函数一起使用,因此您必须指定
seq.default
,而不是
seq
,或
seq.int

例如:

Vectorize(seq.default)(Start, Finish)
## [[1]]
## [1] 1 2 3 4 5 6 7 8 9
## 
## [[2]]
##  [1] 10 11 12 13 14 15 16 17 18 19
## 
## [[3]]
##  [1] 20 21 22 23 24 25 26 27 28 29 30
## 

同意@ColonelBeauvel和@nicola,尽管你可以使用
seq
而不是
,因此

Start = c(1, 10, 20)
Finish = c(9, 19, 30)
Map(seq, Start, Finish)

@ColonelBeauvel,true:-)这不仅仅是为了节省3个字符,还为了避免结果被简化。例如
mapply(“:”,c(0,10,20),c(9,19,29))
不会生成
列表。使用
Map
或添加
SIMPLIFY=FALSE
@nicola,这一点很好,因为
mapply
默认为
SIMPLIFY=TRUE
Start = c(1, 10, 20)
Finish = c(9, 19, 30)
Map(seq, Start, Finish)