兩個向量之間的所有整數,我有兩個向量:序列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