You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:31:53