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)