mks*_*212 6 for-loop r while-loop
我正在用R创建一个二十一点模拟器.下面的代码成功创建了我想要的卡片组.(对于那些参加比赛的人,我将在稍后处理一个Ace的价值).
我的问题是,有没有更好的方法来创建不涉及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)
}
Run Code Online (Sandbox Code Playgroud)
该expand.grid
功能应该有用:
# 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),]
Run Code Online (Sandbox Code Playgroud)
呼叫expand.grid
计算所有卡和套装配对.该value
变量由循环所创建的value
矢量为每个服.最后,rep(seq(nrow(deck)))
重复第1-52行适当的次数以获得副本的多个副本.
这与我最近的paste.grid
问题有关;请参阅那里的一些其他选项,包括直接的levels(interaction(...))
方法。
我自己做了一套牌,它使用 unicode 字符来表示套装,所以看起来很时髦;这就是我所做的:
\n\ncards = c(2:10, "J", "Q", "K", "A")\nsuits = c("\xe2\x99\xa0", "\xe2\x99\xa5", "\xe2\x99\xa6", "\xe2\x99\xa3")\ndeck <- paste0(rep(cards, length(suits)), #card values\n rep(suits, each = length(cards))) #suits\ndeck\n# [1] "2\xe2\x99\xa0" "3\xe2\x99\xa0" "4\xe2\x99\xa0" "5\xe2\x99\xa0" "6\xe2\x99\xa0" "7\xe2\x99\xa0" "8\xe2\x99\xa0" "9\xe2\x99\xa0" "10\xe2\x99\xa0" "J\xe2\x99\xa0" "Q\xe2\x99\xa0" "K\xe2\x99\xa0" \n# [13] "A\xe2\x99\xa0" "2\xe2\x99\xa5" "3\xe2\x99\xa5" "4\xe2\x99\xa5" "5\xe2\x99\xa5" "6\xe2\x99\xa5" "7\xe2\x99\xa5" "8\xe2\x99\xa5" "9\xe2\x99\xa5" "10\xe2\x99\xa5" "J\xe2\x99\xa5" "Q\xe2\x99\xa5" \n# [25] "K\xe2\x99\xa5" "A\xe2\x99\xa5" "2\xe2\x99\xa6" "3\xe2\x99\xa6" "4\xe2\x99\xa6" "5\xe2\x99\xa6" "6\xe2\x99\xa6" "7\xe2\x99\xa6" "8\xe2\x99\xa6" "9\xe2\x99\xa6" "10\xe2\x99\xa6" "J\xe2\x99\xa6" \n# [37] "Q\xe2\x99\xa6" "K\xe2\x99\xa6" "A\xe2\x99\xa6" "2\xe2\x99\xa3" "3\xe2\x99\xa3" "4\xe2\x99\xa3" "5\xe2\x99\xa3" "6\xe2\x99\xa3" "7\xe2\x99\xa3" "8\xe2\x99\xa3" "9\xe2\x99\xa3" "10\xe2\x99\xa3"\n# [49] "J\xe2\x99\xa3" "Q\xe2\x99\xa3" "K\xe2\x99\xa3" "A\xe2\x99\xa3"\n
Run Code Online (Sandbox Code Playgroud)\n