在不使用while和double for循环的情况下在R中创建一副纸牌 [英] Creating A Deck Of Cards In R Without Using While And Double For Loop
问题描述
我正在R中创建一个二十一点模拟器.下面的代码成功创建了我想要的纸牌. (对于那些玩游戏的人,稍后我将讨论Ace的价值.)
I am creating a blackjack simulator in R. The code below succeeds in creating the deck(s) of cards that I want. (For those that play, I will deal with the value of an Ace later).
我的问题是,有没有更好的方法来创建不包含while循环和double for循环的套牌?我对double for循环有更多的疑问.由于创建的套牌数量是可变的,因此while循环是不可避免的.
My question is, is there a better way to create the deck that doesn't involve a while loop plus a double for loop? I have more of an issue with the double for loop. The while loop is likely unavoidable since the number of decks created is variable.
我还初始化了一个空数据帧,我知道这不是最佳实践,但是,在这种情况下,数据集非常小,以至于不会影响性能.
I also initialize an empty data frame which I know isn't the best practice, however, the data set is so small in this case that it won't effect performance.
最后,R中是否有等效的i ++?我也一直在用Java编程,并且已经习惯了.
And lastly, is there an equivalent of i++ in R? I have been programming in java as well and have gotten used to it.
谢谢.
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
函数应该会有所帮助:
The expand.grid
function should be helpful:
# Define suits, cards, values
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:9, rep(10, 4))
totalNumOfDecks <- 2
# Build deck, replicated proper number of times
deck <- expand.grid(cards=cards, suits=suits)
deck$value <- values
deck <- deck[rep(seq(nrow(deck)), totalNumOfDecks),]
对expand.grid
的调用将计算所有牌和西服的配对.通过循环每个西装的value
向量来创建value
变量.最后,rep(seq(nrow(deck)))
重复第1-52行适当的次数,以获取卡座的多个副本.
The call to expand.grid
computes all pairing of cards and suits. The value
variable is created by recycling the value
vector for each suit. Finally, rep(seq(nrow(deck)))
repeats rows 1-52 the proper number of times to get multiple copies of your deck.
这篇关于在不使用while和double for循环的情况下在R中创建一副纸牌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!