2016-08-03 5 views
1

を使用して、第2の端私は2つのベクトルがあります:2、5:最初indecesを開始含まれている二つのベクトルを使用して構築インデックスベクトル、R

startIdxes<-c(1, 5, 12, 22) 
endIdxes<-c(2, 9, 17, 25) 

ベクトルは範囲が1例えば提示9 ... にはどうすればこの2つのベクトルを使用してインデックスベクトルを構築できますか? インデックスベクトルがなければならない。我々は両方のvector Sに対応する値との間の配列とunlistlist出力を得るためにMapを使用することができ

> c(1:2, 5:9, 12:17, 22:25) 
[1] 1 2 5 6 7 8 9 12 13 14 15 16 17 22 23 24 25 

答えて

2

unlist(Map(`:`, startIdxes, endIdxes)) 
#[1] 1 2 5 6 7 8 9 12 13 14 15 16 17 22 23 24 25 

機能Mapは別のオプションは、2つのベクトル間の差異を取得違いのsequenceと「startIdxes」の複製を追加して、オリジナルで連結されて

Map 
function (f, ...) 
{ 
    f <- match.fun(f) 
    mapply(FUN = f, ..., SIMPLIFY = FALSE) 
} 

です'startIdxes'とsort

i1 <- endIdxes - startIdxes 
sort(c(startIdxes, rep(startIdxes, i1) + sequence(i1))) 
#[1] 1 2 5 6 7 8 9 12 13 14 15 16 17 22 23 24 25 
1

を使用できmapply

unlist(mapply(seq,startIdxes,endIdxes)) 

#[1] 1 2 5 6 7 8 9 12 13 14 15 16 17 22 23 24 25 
関連する問題