StackOverflow の最初の投稿なので、エチケットが正しくない場合は優しくしてください。
カードのデッキから引き出された手を含む大きなデータ フレーム (実際には 7 つですが、それは重要ではありません) があります。それに対応する別の配列があり、プレイヤーが最初の手札からどのカードを保持することを選択したかを示します。保持されなかったカードは、デッキから再ドローされます。最初のデータ フレームには、描かれたすべてのカードが保持されるため、5 から 0 の間に保持されたカードの場合、各行は 5 から 10 列の長さにすることができます。それは理にかなっていますか? 例えば:
> str(cards01)
'data.frame': 5044033 obs. of 10 variables
> head(cards01)
V1 V2 V3 V4 V5 V6 V7 V8 structure(c("", "", "", "", "", ""), class = "AsIs")
1 D0 D10 H0 C5 H1 S3 C4 D6
2 D5 S10 H7 C7 S0 S5 S12 H5
3 S4 H4 C1 D4 D11 H6 D1
4 C3 C9 D9 S10 S2 C7 S3 D2
5 H11 C0 C6 H3 H12 C11 S0
6 C10 C9 D11 D8 D5 S8
> str(heldCards01)
num [1:5044033, 1:5] 1 3 1 2 1 1 2 1 1 1 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ ..$ : chr [1:5] "1" "2" "3" "4" ...
> head(heldCards01)
1 2 3 4 5
[1,] 1 3 NA NA NA
[2,] 3 4 NA NA NA
[3,] 1 2 4 NA NA
[4,] 2 3 NA NA NA
[5,] 1 4 5 NA NA
[6,] 1 2 3 4 NA
だから私がやっていることは、プレイヤーが最終的に持つカードだけを含む新しいデータフレームを作成することです。つまり、保持されたカード配列で識別されない各行のセルを削除します。これを実行するコードを書きましたが、現在は週末中ずっと実行されていますが、まだ完了していません。これは私が実行しているコードです (これはすべて、私が持っている各データフレーム/マトリックスのペアを通過するためにラップリーで発生しています。最適化しようとしているビットは mclapply で発生しています):
all.hands <- lapply(stakes, function(stake){
cardsOb <- get(paste("cards", stake, sep = ""))
heldOb <- get(paste("heldCards", stake, sep = ""))
l <- length(cardsOb[,1])
mclapply(1:l, function(rowNum) {
row <- (heldOb[rowNum,])
theNAs <- as.logical(is.na(row))
heldIndex <- row[!theNAs]
discarded <- c(1,2,3,4,5)[-heldIndex]
if(length(discarded) >= 1) {
hand <- cardsOb[rowNum,-discarded]
} else {
hand <- cardsOb[rowNum,]
}
hand <- sort(hand)
})
})
いくつかのステップを切り取る可能性のある欠けている機能はありますか? データ フレームが配列の場合は高速になりますか? 何日も何日も待たなければなりませんか?2 つの Xeon E5-2407 クアッド コア プロセッサと 32GB メモリを搭載した Z620 で実行しています。