0

長さ 14 のベクトルがあり、この方法で 5 のセットをチェックインしたいと思います。

compare = c(rep(1,4),rep(0,10)) # Vector

g.test = matrix(0,5,10)
for (i in 5:14){
 g.test[,i-4] = head(tail(compare,i),5)
}
if (sum(colSums(g.test) >= 3 & colSums(g.test) < 5 ) > 0){yield = T}

ベクトル compare[c(10:14)]to compare[c(9:13)]to ... to を実行して、 andcompare[c(1:5)]があるかどうかを確認しています。sum >= 3< 5

しかし、比較はそのようなベクトルの 1 つにすぎません。私は 1 と 0 の異なる順列のベクトルを 100,000 個持っていますが、すべて長さは 14 です。このようにコードを実行すると、コンピューターが実行するのに 100 秒かかりました。これを行うより良い方法はありますか?

  • 実際にテキサスポーカーのシミュレーションテストを行っています。コードのこの部分は、不完全なストレート ドローをチェックするために使用されます。
4

1 に答える 1

0

これを試して:

g.sums <- rowSums(embed(compare, 5))
yield <- any(g.sums >= 3 & g.sums < 5)

私のマシンで100,000回の反復:

#    user  system elapsed 
#   2.438   0.052   2.493
于 2013-05-24T04:34:08.297 に答える