两个向量之间的所有整数,我有两个向量:序列R中
Start = c(1,10,20)
Finish = c(9,19,30)
我想是这样的工作...
开始:完成
不过,当然它不是。
我想产生类似下面的列表:
[1] 1,2,3,4,5,6,7,8,9
[2] 10 11 12 13 14 15 16 17 18 19
[3] 20 21 22 23 24 25 26 27 28 29 30
最好以某种方式矢量。开始矢量将始终大于相应元素的完成矢量。
两个向量之间的所有整数,我有两个向量:序列R中
Start = c(1,10,20)
Finish = c(9,19,30)
我想是这样的工作...
开始:完成
不过,当然它不是。
我想产生类似下面的列表:
[1] 1,2,3,4,5,6,7,8,9
[2] 10 11 12 13 14 15 16 17 18 19
[3] 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同意,虽然你可以使用序列代替 ':',因此
Start = c(1,10,20)
Finish = c(9,19,30)
Map(seq, Start, Finish)
或映射命令来获得3个字符! – 2015-03-19 10:09:41
@ColonelBeauvel,true :-) – A5C1D2H2I1M1N2O1R2T1 2015-03-19 10:11:59
这不仅仅是为了节省3个字符,还要避免简化结果。例如'mapply(“:”,c(0,10,20),c(9,19,29))'不会产生一个'list'。使用'Map'或者添加'SIMPLIFY = FALSE'。 – nicola 2015-03-19 10:17:45