在不使用while和Double for循环的情况下在R中创建卡片组

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)

jos*_*ber 6

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行适当的次数以获得副本的多个副本.


Mic*_*ico 5

这与我最近的paste.grid问题有关;请参阅那里的一些其他选项,包括直接的levels(interaction(...))方法。

\n\n

我自己做了一套牌,它使用 unicode 字符来表示套装,所以看起来很时髦;这就是我所做的:

\n\n
cards = 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