我在R中創建了一個二十一點模擬器。下面的代碼成功地創建了我想要的副牌。 (對於那些比賽,我會在稍後處理一個Ace的價值)。在沒有使用while和double for循環的情況下在R中創建一副牌
我的問題是,是否有更好的方式來創建不涉及while循環加雙循環的套牌? double for循環有更多問題。 while循環很可能是不可避免的,因爲創建的套牌數量是可變的。
我也初始化一個空的數據框,我知道這不是最好的做法,但是,在這種情況下,數據集非常小,不會影響性能。
最後,在R中是否有相當於i ++的?我一直在使用java進行編程,並且已經習慣了它。
謝謝。
createDeck <- function(totalNumOfDecks = 2)
{
suits <- c("Diamonds", "Clubs", "Hearts", "Spades")
cards <- c("Ace", "Deuce", "Three", "Four","Five",
"Six", "Seven", "Eight", "Nine", "Ten",
"Jack", "Queen", "King")
values <- c(0,2,3,4,5,
6,7,8,9,10,
10,10,10)
deck <- data.frame(Suit=character(0), Card=character(0), Value=numeric(0))
numOfDecks = 1
while (numOfDecks <= totalNumOfDecks){
for (i in suits){
for (j in cards){
deck <- rbind.data.frame(deck, cbind.data.frame(j, i, values[match(j, cards)]))
}
}
numOfDecks = numOfDecks + 1
}
print(deck)
}
請參閱'?expand.grid'。但坦率地說,只用52個等級的單一因素可能會更容易。 – joran
如果josilber用字符串創建N套牌的方法適用於你,那麼讓我建議,因爲大概你想在某個時候洗牌,你創建了一個「洗牌機」,比如'cardorder <樣本(1:(N * 52),N * 52)'並使用結果向量重新排序'deck'行。 –
...只是爲了擴展我的評論:我的意思是我可能只是使用一個整數向量0:51作爲卡片,然後使用模塊化算術來確定西裝和等級,並索引另一個向量來確定價值。這可能比推動data.frame快得多,速度更快。 – joran