目标 : 如何存储、检索和修改计算机内存中的数据
设计一个扑克牌模拟系统,能够自动洗牌和发牌,系统可以记住发牌的结果,
四个任务 :
1 创建一副牌
2 发牌和洗牌函数
3 改变点数系统适应不同的扑克游戏
4 管理扑克牌桌的状态
创建一副扑克牌
第三章: R对象
1、 六种原子型向量:double ,integer,chatacter,logical,complex(复数),raw(原始类型)
2 、 名称属性 class name dim
name 属性
![](https://i-blog.csdnimg.cn/blog_migrate/aecc0e02d0ebf422a7a94221ce813ae2.png)
dim属性
![](https://i-blog.csdnimg.cn/blog_migrate/bb1c5d4e2552af67ac6ee7d5d60fb549.png)
改变维度会改变对象的class属性
3 因子 factor(),存储分类信息,会有一个levels 和 class属性被添加
gender = factor(c("male","female","male","male"))
![](https://i-blog.csdnimg.cn/blog_migrate/3b78e668144b40649a7fb8de0fcf0c6a.png)
4 R 中的强制类型转换
首先,R会将所有原子型字符串都转化为字符创类型
![](https://i-blog.csdnimg.cn/blog_migrate/b0eabd10af7d825f7dd5e103b945be0e.png)
as函数
as.character(1)
as.logical(1)
as.numeric("11")
........
5 List 列表
向量,矩阵,数组都只能存贮单一类型的数据,不过在数据操作时候更加地直接和高效、
List将数据组织在一维集合中,组织的是R对象
![](https://i-blog.csdnimg.cn/blog_migrate/494e44a740ecb6c5e550704ed1750622.png)
6 数据框 data frame
是列表的二维版本 , 可以和Excel做对比,在结构上相似
![](https://i-blog.csdnimg.cn/blog_migrate/9275ebb00cd7e6890dd45a13073729f2.png)
每列的长度需要相同
7 导入数据
tail(),head() 查看大数据的部分信息
![](https://i-blog.csdnimg.cn/blog_migrate/bb02e261a5b0c16df18f90a773355839.png)
保存数据
write.csv(deck,file = "card.csv",row.names = FALSE )
发牌和洗牌函数
第4章 R的记号体系
4.1 值的选取
deck[ , ] 数据框[ , ]
六种,索引便写方式
正整数,负整数,零,空格,逻辑值,名称
(1)0正整数
![](https://i-blog.csdnimg.cn/blog_migrate/17c12047e404a5e79cbb32fe3603e3f0.png)
(2)负整数
不包含
![](https://i-blog.csdnimg.cn/blog_migrate/56fbc42332e72bcecbf14e16959dfb56.png)
(3)零索引
并没有什么用处
(4)空格索引
提取维度的所有元素
(5)逻辑值索引
![](https://i-blog.csdnimg.cn/blog_migrate/d6637e59de73219a7759e43b7662b6d8.png)
(6)名称索引
![](https://i-blog.csdnimg.cn/blog_migrate/282a74aa9d1d1fd0d346671081e398ef.png)
4.2 发牌函数
可以发最顶上的一张牌,但是有问题,K永远在最上面
![](https://i-blog.csdnimg.cn/blog_migrate/b5190ef9bf7203b66f3562a6ec9e22e6.png)
4.3洗牌
思路,随机取出原来的一副牌
random = sample(1:52,size = 52)
deck4 = deck[random, ]
即可完成
![](https://i-blog.csdnimg.cn/blog_migrate/3b3400c1d0e29a3205ae97aa9b8d3daa.png)
洗牌函数 shuffle(cards)
![](https://i-blog.csdnimg.cn/blog_migrate/17ab2a6cd54680e0d062c46235e2459a.png)
4.4 美元符号 和 双中括号
第二种记号体系 $ 符号 提取数据框和列表对象的值
deck$value
$会原封不动地提取元素
![](https://i-blog.csdnimg.cn/blog_migrate/54cf90bea5ea783767f7c415317a7382.png)
双中括号 , 返回的是列表中的元素值
![](https://i-blog.csdnimg.cn/blog_migrate/3dc717b53b5499033b7e5280982ca80f.png)
改变点数系统适应不同的扑克游戏
第五章 对象改值
5.1 对象改值
![](https://i-blog.csdnimg.cn/blog_migrate/fa40f3c166637b181ea570d71750dddd.png)
为数据集添加新变量
![](https://i-blog.csdnimg.cn/blog_migrate/b7a377469b041a1ef7bdf8fd08c70bee.png)
5.2 逻辑值取子集
如何确定洗牌之后某张牌的具体位置
(1)R的七种逻辑符号
a > b , a>=b , a<b,a<=v,a==b,a!=b
a%in%c(a,b,c) c(a,b,c)中是否包含a
![](https://i-blog.csdnimg.cn/blog_migrate/ec334ae2e28ba2a94c8cfb3a3dd2b533.png)
将所有红桃牌的值全部改为0
![](https://i-blog.csdnimg.cn/blog_migrate/765d134a30b3841c82ee5971fae427ee.png)
(2)布尔运算值
& | xor(只有一个为真) !(是否为假)
any(至少一个为真) all(全部为真)
![](https://i-blog.csdnimg.cn/blog_migrate/af30bb65175f817e4a35d03e0730ea1d.png)
5.3 缺失信息
因为某个测量值发生丢失或者被破坏或者测量根本就没有发生
NA表示不可用
![](https://i-blog.csdnimg.cn/blog_migrate/ef9498211fe27781cc255cefd545c730.png)
NA 会原封不动地保留和传送,可以有效避免很多和缺失信息有关的错误
na.rm = TRUE 添加后,在对函数求值是会忽略NA
![](https://i-blog.csdnimg.cn/blog_migrate/8588fa393b6813072b72501f36568449.png)
is.na 用来测试某个数据集中是否存在NA
![](https://i-blog.csdnimg.cn/blog_migrate/f2012d4fa3eee44e674baec47fc8d581.png)
第六章 R的系统环境
(1)parvens 可以查看系统环境
(2)as.enviroment 可以指向环境树的任意一个环境
(3)三个环境拥有自己的调用函数 全局环境,基环境,空环境
![](https://i-blog.csdnimg.cn/blog_migrate/8da28bae8b3b9bca80e2283509e73798.png)
(4) parent.env()查看父环境 emptyenv()没有父环境
(5) ls()或者ls.str() 查看环境中的对象, ls只返回对象名称,ls.str命令展示每个对象的结构
![](https://i-blog.csdnimg.cn/blog_migrate/bc57e503e801f09f9213d9944370c254.png)