Вычесть один список из другого - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь «симулировать» игру в покер. Сначала я создал колоду из 52 карт в качестве фрейма данных. Поэтому я использовал три столбца: Cardvalue, Cardcolor и Rank (1-52).

Теперь два игрока берут каждые пять карт - и игрок с самой высокой картой (рангом) выигрывает игру. Поэтому я написал функцию «покер» и определил двух игроков, каждый из которых берет по 5 карт из колоды.

Проблема в том, что игрок 2 также может взять 7 алмазов, если игрок 1 уже получил его. Моя идея состояла в том, чтобы вычесть результаты первого игрока из колоды, чтобы можно было извлечь только оставшиеся карты - но каждый раз, когда я получаю сообщение об ошибке, список типов недействителен. Я надеюсь, что вы можете мне помочь! Большое вам спасибо!

poker <- function() {deckmat3 player1 <- deckmat3[sample(nrow(deckmat3),5),] player2 <- deckmat3[sample(nrow(deckmat3),5),] return(ifelse(max(player1$rank) > max(player2$rank),"player1","player2"))}

моя идея была:

poker <- function() {poker <- function() {deckmat3 player1 <- deckmat3[sample(nrow(deckmat3),5),] player2 <- deckmat3[deckmat3$player1][sample(nrow(deckmat3),5),] return(ifelse(max(player1$rank) > max(player2$rank),"player1","player2"))} 

Но это не работает: /

Edit:.

Надеюсь, могу предоставить полезные данные:

  1. Вектор для значений карт cv:

    cv <-rep (2,4), представитель (3,4), представитель (4,4), представитель (5,4), представитель (6,4), представитель (7,4), представитель ( 8,4), Rep (9,4), Rep (10,4), Rep (11,4), Rep (12,4), Rep (13,4), Rep (14,4)) </p>

  2. Dataframe deckmat3:

    deckmat3 <- data.frame (cardvalue = c (cv), cardcolor = c ("Diamond", "Club", "Heart", "Spade"), rank = 1: 52) </p>

Затем я добавляю данные в функцию «покер», о которой я упоминал выше. Результаты для игрока 1 и для игрока 2 представляют собой два подсписка из исходного фрейма данных deckmat3 с 5 строками. Проблема в том, что игрок 2 может взять карты, которые уже были извлечены игроком 1. Это означает, что подсписок «игрок 1» должен быть вычтен из «deckmat3» ... и это проблема. Я не могу удалить список из списка: (

1 Ответ

0 голосов
/ 06 мая 2018

Я бы попробовал это по-другому. Вам просто нужно исправить столбец cardRank (не знаю, как вы хотите это определить).

cardValue <- rep(1:13, 4)
cardSuit <-
c(rep("diamond", 13),
  rep("heart", 13),
  rep("spade", 13),
  rep("club", 13))

cardColor <- c(rep("red", 26), rep("black", 26))

cardRank <- 1:52


winnerList <- c()

simulateGames <- function(iterations) {
for (it in 1:iterations) {
    cards <- data.frame(cardValue, cardSuit, cardColor, cardRank)

    player1Cards <- cards[sample(nrow(cards), 5),]

    cards <-
        cards[!rownames(cards) %in% rownames(player1Cards),]

    player2Cards <- cards[sample(nrow(cards), 5),]

    winnerList <-
        c(winnerList, ifelse(
            max(player1Cards$cardRank) > max(player2Cards$cardRank),
            1,
            2
        ))

}
winnerList
}

simulateGames(1000)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...