R语言构造扑克牌自动发牌,洗牌

2023-10-27

在R语言构建自动洗牌,发牌
要求:自动洗牌、发牌
任务一:创建一副牌。学会如何使用R的数据类型和数据结构。
任务二:编写发牌和洗牌的函数。学习从一个数据集中抽取想要的数值。
首先需要创建一副牌(不包括大小王),从R语言的数据对象来看,数据框最合适。
因为花色是字符串,而点数是数字,所以能够承担数据类型不同的二维数据对象——数据框最合适。下面是创建pkp数据对象的代码

pkp<-data.frame(face=rep(c(2:10,"J","Q","K","A"),4),hs=rep(c("黑桃","方块","红桃","梅花"),each=13))

然后我们需要构造发牌,洗牌函数
在构造发牌,洗牌函数的过程中,最重要的理解逻辑,怎么才能发牌呢?
不妨思考模拟下日常生活中是怎么发牌的呢?首先我们都是从牌堆里面抽取一张扑克牌,然后牌堆就少了一张牌,继续按照顺序抽取,直到牌堆没有牌。
如果用代码思考的话,就是在pkp这个牌堆里面抽取第一张,然后有pkp[-1,]丢掉这张牌,继续抽取后丢掉,这就是发牌的过程。

#licensing pkp
licensing<-function(){
  assign("copypkp",copypkp[-1,],envir = globalenv())
  copypkp[1,]
}

在这里需要介绍下assign函数,assign函数是一个赋值语句,与”=”和”<-“不同的是,assign能在不同的环境下赋值。
下面需要介绍环境,环境在R中是比较重要的概念,什么是环境呢?
可以说环境和我们电脑里面的文件夹很类似
环境:用来具体存储对象的地方。
规则1:每一个对象都存储在一个环境当中。
规则2:每一个环境都与一个父环境相连接。构成一个分层的环境系统。
规则3:子环境与父环境的连接是单向的。
parenvs{pryr}:查看R的环境系统,parenvs(all=TRUE)会返回当前会话包含的环境列表。
as.environment():指向环境树中的任意一个环境。
globalenv();base();emptyenv();parent.env()
assign():赋值函数
下面通过parenvs查看当前R语言下的环境
这里写图片描述
默认环境是globalenv(全局变量),也就是说我们创建对象,一般都是在globalenv环境里,
如果创建函数的话,R会自动给函数分配环境,且函数环境是globalenv的子环境
说环境的话可能不好理解,我们把环境比作文件夹。globalenv环境相当于默认文件夹,我们在globalenv环境创建的对象都储存在默认文件夹里面,函数相当于在默认文件夹里面再创建一个文件夹,函数文件夹创建的对象储存在函数文件夹中。
这里写图片描述
关于环境有一点很重要。就是如何应用环境里面的对象。下面是环境作用域规则
活动环境:当前R执行活动的地方。
规则1:任何时候,R的活动环境都只有一个。
规则2:所有的新对象都会被存储在该环境中。
environment():查看当前的活动环境。
作用域规则:R搜索对象时会遵循的一系列规则。
规则1:R首先在当前的活动环境中搜索对象。
规则2:在命令行工作中,活动环境就是全局环境。
规则3:当R在某个环境中没有搜索到对象时,R会进入到该环境的父环境。
下面是洗牌函数的构造
我理解的洗牌就是要把pkp这个数据对象里面的顺序打乱,如何打乱顺序呢?
我的思路是,构造一个随机向量,里面有52个值,然后构造一个循环52次的结构,将随机向量一个个的赋值给pkp这个数据对象.下面是洗牌函数代码

#shuffle pkp
shuffle<-function(){
  copypkp<-pkp
  random<-sample(c(1:52),size=52)
  for (i in 1:52)
  {
    assign("copypkp",copypkp[random,],envir = globalenv())
  }
  print("your pkp has been shuffled")
}

完整代码如下

#create pkp data
pkp<-data.frame(face=rep(c(2:10,"J","Q","K","A"),4),hs=rep(c("黑桃","方块","红桃","梅花"),each=13))
#copy pkp
copypkp<-pkp
#licensing pkp
licensing<-function(){
  assign("copypkp",copypkp[-1,],envir = globalenv())
  copypkp[1,]
}
#shuffle pkp
shuffle<-function(){
  copypkp<-pkp
  random<-sample(c(1:52),size=52)
  for (i in 1:52)
  {
    assign("copypkp",copypkp[random,],envir = globalenv())
  }
  print("your pkp has been shuffled")
}

有一个点需要特别注意,就是对象的更改。两个函数我都是对copypkp这个数据对象进行更改,pkp这个数据对象是没有变化的。这样有利于shuffle(洗牌)后的重置化。
但是这个自动洗牌,发牌还有一个重大的缺陷:如果pkp这个数据对象不小心被删除的化,整个洗牌,发牌过程都实现不了。
要解决这个问题,我们就必须用到闭包函数的概念和深入理解环境
在下一篇我会详细介绍闭包的实现和环境的深入理解

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R语言构造扑克牌自动发牌,洗牌 的相关文章

  • ggplot2 geom_function 可以跨 arg 值进行分面吗?

    我想通过分面 geom function 创建 ggplot2 图 以便函数的参数在网格中变化 例如像这样的东西 my function lt function x par if par 1 return sin x else return
  • R:从 Github 安装包时出现编码问题

    我正在尝试安装dcStockR https github com yutannihilation dcStockR来自 Github 的包 这是一个htmlwidgets http www htmlwidgets org 周围的包装纸dc
  • 如何在 Shiny 应用程序中访问/打印/跟踪当前选项卡选择?

    我正在一个闪亮的应用程序中工作 我希望能够访问用户在会话中当前所在选项卡上的信息 我有一个观察事件 用于侦听要单击的特定按钮 简而言之 我想存储 打印用户单击此按钮时所在的当前选项卡 单击此按钮后 选项卡将更改为带有 updateTabIt
  • 将多个函数应用于一个向量

    我正在寻找一种将多个函数应用于一个向量的选项 我认为这对于逆应用函数来说是一种仁慈 其中一个函数应用于许多向量 或列 有没有办法指定两个或多个函数 例如 min 和 max 并将其应用于向量 与 CathG的评论类似 但没有get v lt
  • R:适合显示具有倾斜计数的数据的图

    我有这样的数据 Name Count Object1 110 Object2 111 Object3 95 Object4 40 Object2000 1 因此 只有前 3 个物体的计数较高 其余 1996 个物体的数量少于 40 个 其中
  • 闪亮的仪表板侧边栏中的可折叠菜单项

    我的侧边栏中有两个菜单项 目前 如果我单击任何菜单项 则会显示所有菜单项的选项卡项 我想让它可折叠 如果我单击多个名称菜单 单个分析应该折叠 如果我单击单个分析 多个分析应该折叠 目前的设计是 相同的可重现代码是 library shiny
  • 如何在 R 中创建纯 ascii 表作为输出,类似于 MySQL 风格?

    我正在尝试为 R 找到一个输出的函数data frameMySQL 风格的 ascii 表中的对象如下 id var1 var2 1 asdf g 2 asdf h 3 asdf j 有这样的功能吗 至少有两个工具可以做到这一点 csvfi
  • R:igraph、社区检测、edge. Betweenness 方法、统计/列出每个社区的成员?

    我有一个相对较大的图表 其中顶点 524 边 1125 是现实世界的交易 边是有向的并且具有权重 包含是可选的 我正在尝试调查图中的各个社区 并且本质上需要一种方法 计算所有可能的社区 计算最佳社区数量 返回每个 最佳 社区的成员 成员数量
  • 包什么时候需要为它自己的对象使用 :::

    考虑这个 R 包有两个函数 一个是导出函数 另一个是内部函数 hello R export hello lt function internalFunctions hello internal 你好 内部 R hello internal
  • 如何在复杂的皂膜GAM中设置更平滑的边界条件?

    我正在对南太平洋岛屿泻湖中宽吻海豚的分布进行建模 我想使用肥皂膜平滑器来模拟海豚在二维表面 经度 x 纬度 上存在的概率 考虑到陆地边界 显然海豚不能在陆地上行走 我想知道如何将我的研究区域 陆地和近海水域 的边界固定为等于零的条件 因为我
  • rpy2 无法加载外部库

    希望有人能帮忙解决这个问题 R版本 2 14 1rpy2版本 2 2 5蟒蛇版本 2 7 3 一直在尝试在 python 脚本中使用 rpy2 加载 R venneuler 包 该包以 rJava 作为依赖项 venneuler 和 rJa
  • 导出绘图变量显示空白图像

    我正在使用 JRI 进行 java 和 R 集成 请找到下面的脚本 String path C Users hrpatel Desktop CSVs DataNVOCT csv rengine eval library tseries re
  • 词云中的空格

    我目前将 wordle 用于词云的许多艺术用途 我认为 R 的词云可能具有更好的控制能力 1 如何在词云中保持单词大写 解决了 2 如何将两个单词作为一个块保留在词云中 wordle 使用 运算符来完成此操作 R 的词云仅按原样打印 例如
  • 从数据帧创建 sf 多边形

    我有一个包含一组多边形坐标的数据框 这就是我将其转换为spatialPolygons 包sp 的方法 my df lt data frame Plot c A A A A A B B B B B Corner c SW NW NE SE S
  • 相对于时间求平均值

    我有以下带有日期时间和相应值的数据集 时间间隔为每10分钟一次 我需要以 15 分钟的间隔生成新行 例如 15 40 的值为 599 15 50 的值为 594 因此需要在两者之间生成一个新行 即 15 45 的平均值为 599 和 594
  • 可以使用部分名称访问列表成员吗?这是一个功能吗?

    考虑这个 R 代码 gt l list key 1 gt l k 1 1 gt l ke 1 1 gt l k NULL gt names l 1 key 这是否意味着您可以使用以下方式访问列表成员 及其部分名称 当我在一次令人沮丧的错误搜
  • 在r中水平旋转直方图

    谁能帮我如何在 r 中将直方图旋转 90 度 我知道箱线图中有一个选项 horiz T 但我不知道直方图是否有类似的选项 我认为你必须使用 hist 和 barplot 来完成它 如下所示 直接来自文档 你可以在这里检查它 layout x
  • 在 R 中创建 xlsx 工作表 - 字体颜色不起作用

    我正在开发一个项目 需要从特定类型的数据框架自动生成数据电子表格 我读过关于如何执行此操作的有用解释here http www sthda com english wiki r xlsx package a quick start guid
  • R 计算股票的 beta(使用 PerformanceAnalytics CAPM.beta() 函数或 lm() 函数产生意外结果)

    我正在尝试使用 PerformanceAnalytics CAPM beta 函数量化 R 中股票的 beta 基准测试与 SPY 结果甚至与我在 Yahoo Google Finance 在线看到的值不接近 代码 require Perf
  • 在模块中使用shiny的renderUI

    这是我在 stackoverflow 上的第一个问题 我在闪亮 1 0 5 中遇到模块和 renderUI 的问题 当我在中使用 renderUI 时 Main Part ui lt bootstrapPage uiOutput Dynam

随机推荐

  • 通过Arduino ESP8266向闪存文件系统上传文件

    通过Arduino ESP8266向闪存文件系统上传文件 下载 Arduino ESP8266闪存文件插件程序 您有两种方法可以下载该插件程序 第一种方法是通过点击此链接进入 Arduino ESP8266官方GitHub页面下载 详情请见
  • Linux Vmlinux反汇编操作和 oops stack 回朔分析

    1 Linux Vmlinux反汇编操作和代码分析 1 1 对vmlinx反汇编 arm linux gnueabi objdump d vmlinux gt debug s 1 2 debug s代码段分析 vmlinux file fo
  • Android框架源码分析——以Arouter为例谈谈学习开源框架的最佳姿势

    得意于众多项目和第三方库的开源 开发中使用几行代码即可实现复杂的功能 但使用只是源码库的搬运工 源码中真正牛逼的技术并不属于我们 所以对源码和开源库的学习成了Android开发者提升技能的必经之路 笔者也曾经认真学习了常用开源框架的原理和实
  • ant-design-vue 图片预览组件,支持旋转,放大缩小,下载

    图片预览组件 支持旋转 放大缩小 下载 图片预览组件 支持旋转 放大缩小 下载 复制代码
  • 【华为OD机试真题 Python】快速开租建站(100%通过)

    前言 本专栏将持续更新互联网大厂机试真题 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于大厂机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email nansun0
  • Promise的九大方法(resolve、reject、then、catch、finally、all、allSettled、race、any)你都用过那些?

    前言 定期复盘 今天我们来复习一下 Promise 的几个方法 分别是 Promise resolve Promise reject Promise then Promise catch Promise finally Promise al
  • linux怎样切换成root用户

    输入命令 su root 即可 如果是使用vagrant的话 密码默认为vagrant
  • 基于stm32f407VGT6控制WS2812的TIM1+PWM+DMA实现方式

    项目中使用到了ws2812灯带 作为产品的外观显示灯 经过开发之后 整理一下 仅供大家参考 WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源 其外型与一个5050 LED灯珠相同 每个元件即为一个像素点 像素点内部包含了智
  • 达梦数据库ODBC连接异常问题

    一 ODBC介绍 ODBC 即开放数据库连接Open Database Connectivity 是为解决 异构数据库间的数据共享而产生的一种数据库访问接口标准 ODBC 为异构数据库访问提供统一接口 允许应用程序以SQL 为数据存取标准
  • linux内核参数注释与优化

    linux内核参数注释与优化 目录 1 linux内核参数注释 2 两种修改内核参数方法 3 内核优化参数生产配置 参数解释由网络上收集整理 常用优化参数对比了网上多个实际应用进行表格化整理 使查看更直观 学习linux也有不少时间了 每次
  • 拓扑排序(最大食物链计数、图文结合)

    拓扑排序 拓扑排序 topological sort 是指由某个集合上的一个偏序得到该集合上的一个全序的操作 拓扑排序常用来确定一个依赖关系集中 事物发生的顺序 拓扑排序是对有向无环图的顶点的一种排序 它使得如果存在一条从顶点A到顶点B的路
  • Eclipse使用教程

    Eclipse使用教程 目录 1 Eclipse的基本概念 2 Eclipse创建Java文件 3 eclipse 代码提示功能 4 快捷键的使用 5 代码自动生成功能 6 代码注释 7 代码重构 重点 下载软件 Eclipse官方网站 点
  • 最近的一些感想

    我正在经历入行以来规模最小的一个项目 但是我却要使用很多的复杂技术 我已经为它实现了一个微型状态机 接下来我还要研究规则引擎 甚至可能还要自定义通讯协议 麻雀虽小 五脏俱全 沟通永远是最重要 最困难的事情 可是我永远也无法说服任何人 谁都有
  • 算法题记录2:跳格子问题

    题目 存在一个数组 0 1 2 3 1 2 3 其中包含的数字可能相同可能不同 跳格子规则 不同的相邻数字只能一个一个跳 而相同的数字可以无视数组中的距离 一步即达 问题 问从初始位置到数组末尾需要跳多少次 示例 0 1 2 3 4 5 6
  • [深入研究4G/5G/6G专题-35]: URLLC-6-《中国联通5G URLLC技术白皮书3.0版本》解读-2-无线侧关键技术

    目录 第3章 URLLC关键技术之无线接入网技术 3 1 无线接入网技术 3 1 1 低延时增强技术
  • 分部积分题型总结笔记(分部积分超强拓展)

    分部积分在考研中的重要性不用多说了 是很多题目解题的关键 我从李林880 张宇1000题 汤家凤1800中 对分部积分常考的六类题型进行了总结 见下 分部积分的作用 基础好的可跳过 分部积分的初始表达式如下 u v d x u v u v
  • Python项目打包, docker build构建docker镜像, Docker Compose (Docker编配)

    重点摘要 将本地Python项目打包构建docker镜像 并在docker中运行 流程1 8 8 Docker Compose Docker编配 附录 其他常用docker命令 1 首先 完成本地Python的开发 测试 2 1 将项目依赖
  • QT5.9.3中debug问题:DirectWrite: CreateFontFaceFromHDC() failed (Unknown error 0x88985000.) for QFontDef

    今天在迁移同时的代码的时候遇到如下问题 从QT4 8 6迁移到QT5 9 3 MSVC2015 32bit DirectWrite CreateFontFaceFromHDC failed Unknown error 0x88985000
  • SD卡小结

    最近应老板要求 用mega328P做了一个小板用来将串口接收的数据存在SD卡中 主要是保存长时间的一个其他板子的串口log而做的一个小板子 停停顿顿将近2周才做完 中间还做了其他的事情 当然主要原因是水平有限 以前没怎么接触过SD卡和FAT
  • R语言构造扑克牌自动发牌,洗牌

    在R语言构建自动洗牌 发牌 要求 自动洗牌 发牌 任务一 创建一副牌 学会如何使用R的数据类型和数据结构 任务二 编写发牌和洗牌的函数 学习从一个数据集中抽取想要的数值 首先需要创建一副牌 不包括大小王 从R语言的数据对象来看 数据框最合适