创建由 'from' 和 'to' 向量定义的整数序列
Create integer sequences defined by 'from' and 'to' vectors
我有两个定义开始(从)索引和结束(到)索引的向量:
Start = c(1, 10, 20)
Finish = c(9, 19, 30)
我想沿着两个向量创建一个包含所有 Start:Finish
序列的列表,即生成序列 Start[1]:Finish[1]
(1:9
); Start[2]:Finish[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' 向量中的相应元素。
只需使用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)
我有两个定义开始(从)索引和结束(到)索引的向量:
Start = c(1, 10, 20)
Finish = c(9, 19, 30)
我想沿着两个向量创建一个包含所有 Start:Finish
序列的列表,即生成序列 Start[1]:Finish[1]
(1:9
); Start[2]:Finish[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' 向量中的相应元素。
只需使用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)