我在R中创建了一个二十一点模拟器并遇到了意想不到的问题。在点击功能中,我想从卡片中删除一张卡片,该卡片存储为数据框。然而,删除工作,使得在其他功能中识别的新减少的数据帧不起作用。换句话说,当我调用命中函数并传递数据框时,会传递一副甲板副本。
我认为这可以使用参考变量或指针来处理,但是我没有在R上看到很多关于这个问题的讨论。另外,使用全局变量可以使用甲板,但我知道这不是很受欢迎。
当从命中功能执行打印(str(deck))行时,数据框由51个正确的对象组成。当它从Main函数执行时,它包含52个对象。我喜欢从现在开始识别51个对象的数据框。
这是代码。您可以运行Main函数,它将生成我讨论过的所有内容:
Main <- function()
{
setDir()
deck <- createDeck()
hit(deck)
print(str(deck))
}
hit <- function(deck)
{
randomNum <- sample(nrow(deck),1) #Row index in data frame of card to be dealt
card <- deck[randomNum,]
deck <- deck[-randomNum,]
print(card)
print(str(deck))
}
createDeck <- function(totalNumOfDecks = 1)
{
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
}
colnames(deck) <- c("Card", "Suit", "Value")
return (deck)
}
setDir <- function()
{
setwd("/Users/michaelsankari/Documents/Trading & Investment/Ideas & Analysis/Blackjack")
}
谢谢。