2.8 Giochi di carte
Avendo presentato le nozioni base del sistema di notazione di R
,
utilizziamo tali conoscenze per manipolare il data.frame. L’istruzione
ritorna tutte le righe e tutte e le colonne del data.frame deck
. Le
righe sono identificate dal primo indice, che va da 1 a 52. Permutare in
modo casuale l’indice delle righe equivale a mescolare il mazzo di
carte. Per fare questo, utilizziamo la funzione sample()
ponendo replace=FALSE
e size
uguale alla dimensione del vettore che contiene gli indici da 1 a 52:
random <- sample(1:52, size = 52, replace = FALSE)
random
#> [1] 41 35 51 22 3 10 2 15 11 16 46 21 7 19 43 17 27 50 39 44 14 18 40 47 31
#> [26] 30 52 37 20 33 6 9 5 49 13 4 8 28 32 45 42 26 36 1 48 23 24 29 34 25
#> [51] 38 12
Utilizzando il vettore random
di indici permutati otteniamo il
risultato cercato:
deck_shuffled <- deck[random, ]
head(deck_shuffled)
#> face suit value
#> 41 queen hearts 12
#> 35 five diamonds 5
#> 51 two hearts 2
#> 22 five clubs 5
#> 3 jack spades 11
#> 10 four spades 4
Possiamo ora scrivere una funzione che include le precedenti istruzioni:
shuffle <- function(cards) {
random <- sample(1:52, size = 52, replace = FALSE)
return(cards[random, ])
}
Invocando la funzione shuffle()
possiamo generare un data.frame che
rappresenta un mazzo di carte mescolato:
Se immaginiamo di distribuire le carte di questo mazzo a due giocatori di poker, per il primo giocatore avremo:
deck_shuffled[c(1, 3, 5, 7, 9), ]
#> face suit value
#> 26 ace clubs 1
#> 44 nine hearts 9
#> 29 jack diamonds 11
#> 42 jack hearts 11
#> 22 five clubs 5
e per il secondo: