删除数据框中的行并跨功能 - 参考变量?

时间:2014-07-11 22:17:31

标签: r pointers dataframe

我在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")
}

谢谢。

0 个答案:

没有答案