Rはベクトルで最も効率的に機能するので、ループは避ける必要があります。私は実際にこの方法でコードを書くことを自分自身に教えるのに苦労しています。コードを「ベクトル化」する方法についていくつかのアイデアが欲しいです。st
状態( )、plan1(p1
) 、plan2()の10,000個の一意でない組み合わせに対して10年間のサンプルデータを作成する例を次に示しますp2
。
st<-NULL
p1<-NULL
p2<-NULL
year<-NULL
i<-0
starttime <- Sys.time()
while (i<10000) {
for (years in seq(1991,2000)) {
st<-c(st,sample(c(12,17,24),1,prob=c(20,30,50)))
p1<-c(p1,sample(c(12,17,24),1,prob=c(20,30,50)))
p2<-c(p2,sample(c(12,17,24),1,prob=c(20,30,50)))
year <-c(year,years)
}
i<-i+1
}
Sys.time() - starttime
これは私のラップトップで実行するのに約8分かかります。予想どおり、それぞれが100,000の値を持つ4つのベクトルになります。ベクトル関数を使用してこれをより速く行うにはどうすればよいですか?
ちなみに、上記のコードをiで1000ループに制限すると、2秒しかかかりませんが、10,000ループには8分かかります。なぜですか?