私の問題に対する有効な解決策がありますが、非常に遅いため使用できません (私の計算では、シミュレーション全体に 2 ~ 3 年かかると予測されています!)。したがって、私はより良い(より速い)解決策を探しています。これは(本質的に)私が扱っているコードです:
N=4
x <-NULL
for (i in 1:N) { #first loop
v <-sample(0:1, 1000000, 1/2) #generate data
v <-as.data.frame(v) #convert to dataframe
v$t <-rep(1:2, each=250) #group
v$p <-rep(1:2000, each=500) #p.number
# second loop
for (j in 1:2000) { #second loop
#count rle for group 1 for each pnumber
x <- rbind(x, table(rle(v$v[v$t==1&v$p==j])))
#count rle for group 2 for each pnumber
x <- rbind(x, table(rle(v$v[v$t==2&v$p==j])))
} #end second loop
} #end first loop
#total rle counts for both group 1 & 2
y <-aggregate(x, list(as.numeric(rownames(x))), sum)
つまり、コードはコイントス シミュレーションを生成します ( v
)。グループ係数が生成されます (1 & 2)。p.number 係数が生成されます (1:2000)。グループ 1 とグループ 2 の両方について、各 p.number (1:2000) のランの長さが記録されます (各 p.number には両方のグループのランがあります)。ループ (最初のループ) の後N
、総実行長がテーブル (集計) として表示されます (つまりN
、合計としてのループにわたる各グループ、各 p.number の実行長)。
作業しているデータは個々のファイルに含まれているため、最初のループが必要です (そのため、ファイルをロードし、さまざまな統計を計算してから、次のファイルをロードして同じことを行います)。私は 2 番目のループにはそれほど執着していませんが、より高速なものに置き換える方法がわかりません。
2 番目のループを (願わくば、はるかに) 高速化するにはどうすればよいでしょうか?