基于RStudio生成牌组后抽取对应手牌的技术咨询
获取对应手牌的几种方法
嘿,你已经搞定了牌组生成和随机手牌序号的抽取,接下来拿到对应的手牌其实很简单,这里给你几个实用的方案:
方法1:基础行索引法
R中的数据框支持直接用行序号提取对应行的数据,你已经有了hand这个存储随机行号的向量,直接用它作为行索引就能取出对应的手牌:
# 提取对应手牌 my_hand <- deck[hand, ] # 打印查看结果 print(my_hand)
这个方法最直接,不需要额外加载包,适合快速实现需求。
方法2:使用dplyr的slice函数(tidyverse风格)
如果你习惯用tidyverse系列工具,dplyr包的slice()函数可以更直观地按行号提取数据,先确保你已经安装并加载了dplyr:
# 如果没安装过dplyr先安装 # install.packages("dplyr") library(dplyr) # 提取手牌 my_hand <- deck %>% slice(hand) print(my_hand)
小提示:修正牌组的列名
看了你的代码,发现一个小细节:初始化deck时你设置了列名suits和cards,但循环里用cbind.data.frame(j, i)会把列名变成j和i,这会导致后续查看手牌时列名不清晰。建议修改循环里的cbind代码,指定列名和初始化一致:
suits <- c("Heart", "Diamond", "Club", "Spade") cards <- c("Ace", "King", "Queen", "Jack", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten") deck <- data.frame(suits = character(0), cards = character(0)) numOfDeck = 1 while (numOfDeck == 1){ for (i in suits){ for (j in cards){ # 指定列名,和初始化的deck匹配 deck <- rbind.data.frame(deck, cbind.data.frame(cards = j, suits = i)) } } numOfDeck = numOfDeck + 1 } hand <- sample(1:52, 5)
内容的提问来源于stack exchange,提问作者Flaming Unicorn
相关产品推荐
相关产品推荐

