2012-08-20 3 views
14

同じモードと同じ長さの2つのベクトルをインターレースしたい。セイ:2つのベクトルを交互に織り交ぜるか、またはインターレースする

a <- rpois(lambda=3,n=5e5) 
b <- rpois(lambda=4,n=5e5) 
私は次のようになり、ベクトルを作成するには、これら二つのベクトルを織り交ぜるか、インターレースしたい

同等c(a[1],b[1],a[2],b[2],...,a[length(a)],b[length(b)])

私の最初の試みであったこの:

sapply(X=rep.int(c(3,4),times=5e5),FUN=rpois,n=1) 

が、それはrpoisが必要です必要以上に多くの時間を呼び出すことができます。

私の最高の試みは、これまで行列にそれを変換し、ベクターに戻って再変換することであった:

d <- c(rbind(rpois(lambda=3,n=5e5),rpois(lambda=4,n=5e5))) 
d <- c(rbind(a,b)) 

はそれをやって行くには良い方法はありますか?または同じことを実現する基底関数Rがありますか?

+0

あなたが質問からの回答の要素を削除してくださいできますか?質問であなた自身の質問に答えると、あまりにも混乱します。 @benbolkerの回答を編集するか、新しい回答を投稿することができます。 – Andrie

+0

@Andrie Done。申し訳ありません。 –

答えて

13

rbindメソッドはうまくいくはずです。

rpois(lambda=c(3,4),n=1e6) 

を使用することもできます。これは、Rがラムダ値のベクトルを必要な長さに自動的に複製するためです。そこ速度の大きな違いはありません。

library(rbenchmark) 
benchmark(rpois(1e6,c(3,4)), 
    c(rbind(rpois(5e5,3),rpois(5e5,4)))) 


#          test replications elapsed relative 
# 2 c(rbind(rpois(5e+05, 3), rpois(5e+05, 4)))   100 23.390 1.112168 
# 1      rpois(1e+06, c(3, 4))   100 21.031 1.000000 

はと優雅さは、見る人の目にある...もちろん、c(rbind(...))方法は、交互ベクターを構築するため、一般的に働き、他のソリューションはrpoisに固有または他のである一方、そのように引数を複製する関数。ベンBolkerの答え組み込む

+0

ああ、それは私に起こったことはありません。私はRで考える前に行く方法があります。ありがとう! –

3

いくつかの速度のテスト、:

> benchmark(
+ c(rbind(rpois(lambda=3,n=5e5),rpois(lambda=4,n=5e5))), 
+ c(t(sapply(X=list(3,4),FUN=rpois,n=5e5))), 
+ sapply(X=rep.int(c(3,4),times=5e5),FUN=rpois,n=1), 
+ rpois(lambda=c(3,4),n=1e6), 
+ rpois(lambda=rep.int(c(3,4),times=5e5),n=1e6) 
+) 
                    test 
1 c(rbind(rpois(lambda = 3, n = 5e+05), rpois(lambda = 4, n = 5e+05))) 
2     c(t(sapply(X = list(3, 4), FUN = rpois, n = 5e+05))) 
4         rpois(lambda = c(3, 4), n = 1e+06) 
5   rpois(lambda = rep.int(c(3, 4), times = 5e+05), n = 1e+06) 
3  sapply(X = rep.int(c(3, 4), times = 5e+05), FUN = rpois, n = 1) 
    replications elapsed relative user.self sys.self user.child sys.child 
1   100 6.14 1.000000  5.93  0.15   NA  NA 
2   100 7.11 1.157980  7.02  0.02   NA  NA 
4   100 14.09 2.294788  13.61  0.05   NA  NA 
5   100 14.24 2.319218  13.73  0.21   NA  NA 
3   100 700.84 114.143322 683.51  0.50   NA  NA 
+0

私は 'rbind'コマンドがここでうまくいかにうまくいっているのを見て非常に驚いています。私はuseRsがメモリゴブラーとしてrbindとcbindに非常に強く抗議していることを覚えているようです... – AdamO

関連する問題