R语言七天入门教程七:项目实战

在完成之前R语言基础知识的学习后,今天的内容是项目实战,通过完成一些小项目来巩固知识。

一、矩阵运算计算器(变量与运算符练习)
1、问题描述

给定矩阵A和B,计算矩阵相加、相减、相乘,如果无法进行相关运算,需要给出提示。

2、解决思路

对于矩阵相加、相减、相乘等操作,对矩阵的形状有特定的要求。因此我们可以先判断形状是否符合要求,如果符合,就返回计算结果;如果不符合,就给出相应提示。

3、代码
# 矩阵加法
mat_add<-function(mat_A, mat_B){# dim()函数用于获取矩阵的形状,返回值是一个长度为2的向量,分别表示矩阵的行数和列数size_A = dim(mat_A) # 获取矩阵A的形状size_B = dim(mat_B) # 获取矩阵B的形状if(size_A[1] == size_B[1] && size_A[2] == size_B[2]) # 如果形状相同,则可以相加return mat_A + mat_Belseprint('The dimensions of mat_A and mat_B are not equal.')
}# 矩阵减法
mat_minus<-function(mat_A, mat_B){size_A = dim(mat_A) # 获取矩阵A的形状size_B = dim(mat_B) # 获取矩阵B的形状if(size_A[1] == size_B[1] && size_A[2] == size_B[2]) # 如果形状相同,则可以相减return mat_A - mat_Belseprint('The dimensions of mat_A and mat_B are not equal.')
}# 矩阵元素乘法
mat_element_multiply<-function(mat_A, mat_B){size_A = dim(mat_A) # 获取矩阵A的形状size_B = dim(mat_B) # 获取矩阵B的形状if(size_A[1] == size_B[1] && size_A[2] == size_B[2]) # 如果形状相同,则可以元素相乘return mat_A * mat_Belseprint('The dimensions of mat_A and mat_B are not equal.')
}# 矩阵乘法
mat_multiply<-function(mat_A, mat_B){size_A = dim(mat_A) # 获取矩阵A的形状size_B = dim(mat_B) # 获取矩阵B的形状if(size_A[1] == size_B[2] && size_A[2] == size_B[1]) # 如果形状匹配,则可以相乘return mat_A %*% mat_Belseprint('The dimensions of mat_A and mat_B do not match.')
}# 先创建三个矩阵
mat_A = matrix(data=c(1:6), nrow=2, ncol=3, byrow = TRUE)
mat_B = matrix(data=c(7:12), nrow=2, ncol=3, byrow = TRUE)
mat_C = matrix(data=c(13:18), nrow=3, ncol=2, byrow = TRUE)
print(mat_A)
print(mat_B)
print(mat_C)# 依次调用函数进行计算
mat_add(mat_A, mat_B)
mat_minus(mat_A, mat_B)
mat_element_multiply(mat_A, mat_B)
mat_multiply(mat_A, mat_C)mat_add(mat_A, mat_C) # 无法计算,给出提示
4、结果

运行结果如下,可以看到由于mat_A和mat_C的形状并不一致,所以无法进行相加:

二、人机猜拳小游戏(程序控制结构练习)
1、问题描述

和电脑进行石头剪刀布的小游戏,由用户进行选择出拳,并统计电脑和用户的得分,用户可以选择是否退出。

2、解决思路

可以考虑一个死循环来监听用户的输入,根据用户不同的输入来进行猜拳或者退出游戏,每次猜拳后就打印游戏得分情况。

3、代码
rock_paper_scissors<-function(){win = 0 # 赢的分数lose = 0 # 输的分数draw = 0 # 平的分数while(TRUE){choice = readline(prompt='Please input your choice: 1-rock, 2-paper, 3-scissors, 4-quit.--') # 读取当前行用户的输入,并存储到choice变量中user_number = as.numeric(choice) # 将字符型的choice变量转换为数字型变量user_number# sample函数从给定向量中随机采样, size是采样的个数,此处用于生成随机数pc_number = sample(1:3, size = 1) # 生成区间[1,3]内的一个随机整数      if(is.na(user_number)){ # 输入无法转换为数字,说明输入有误,提示用户重新输入print('Please input one of "1, 2, 3, 4".')next # 直接开始下一次循环}else if(user_number == 4){ # 等于4,就退出游戏# cat函数用于将字符串和变量值进行拼接cat('you win:', win, 'lose:', lose, 'draw:', draw) # 游戏结果break}else if(user_number == 1){ # 玩家出石头if(pc_number == 1) { # 电脑出石头print('You choose rock, pc chooses rock.')draw = draw + 1 # 平局}else if(pc_number == 2){ # 电脑出布print('You choose rock, pc chooses paper.')lose = lose + 1 # 输了}else if(pc_number == 3) { # 电脑出剪刀print('You choose rock, pc chooses scissors.')win = win  + 1 # 赢了}     cat('you win:', win, 'lose:', lose, 'draw:', draw)}else if(user_number == 2){ # 玩家出布if(pc_number == 1) { # 电脑出石头print('You choose paper, pc chooses rock.')win = win  + 1 # 赢了}else if(pc_number == 2){ # 电脑出布print('You choose paper, pc chooses paper.')draw = draw + 1 # 平局}else if(pc_number == 3) { # 电脑出剪刀print('You choose paper, pc chooses scissors.') lose = lose + 1 # 输了}cat('you win:', win, 'lose:', lose, 'draw:', draw)}else if(user_number == 3){ # 玩家出剪刀if(pc_number == 1) { # 电脑出石头print('You choose scissors, pc chooses rock.')lose = lose + 1 # 输了}else if(pc_number == 2){ # 电脑出布print('You choose scissors, pc chooses paper.')win = win  + 1 # 赢了}else if(pc_number == 3) { # 电脑出剪刀print('You choose scissors, pc chooses scissors.') draw = draw + 1 # 平局}cat('you win:', win, 'lose:', lose, 'draw:', draw)}else{ # 输入的不是1,2,3,4中的一个,应提示重新输入print('Please input one of "1, 2, 3, 4".')}}
}# 调用函数,开始游戏
rock_paper_scissors()
4、结果

结果如下,可以看到,每次游戏后,都会显示当前的得分情况,并且对于异常输入也会有提示:

三、学生成绩分析(数据框和文件读写练习)
1、问题描述

给定一个csv文件,里面存放的是班级学生的某次考试成绩,试分析本次考试情况。(中位数、平均数、最高分、最低分、学生分数的区间分布等)

2、解决思路

读取csv文件为数据框,通过对数据框进行查询,获取每门课的成绩,通过因子类型可以更方便地统计学生成绩的区间分布。

3、代码

记录学生成绩的students.csv文件如下:

id,Chinese,Math,English
1,110,120,114
2,107,118,116
3,105,113,118
4,102,112,115
5,98,99,100
6,102,114,117
7,106,112,120
8,96,95,89
9,88,84,86
10,103,104,104

代码如下:

scores = read.csv('students.csv')
print(scores) # 查看成绩
# 我们可以使用summary()函数查看整体的综合信息
summary(scores) # 查看整体统计信息
# 如果要关注单个学科的成绩,以语文成绩为例
summary(scores$Chinese)# 也可以按需求一项一项查看
mean(scores$Chinese) # 平均分
median(scores$Chinese) # 中位数
max(scores$Chinese) # 最高分
min(scores$Chinese) # 最低分
var(scores$Chinese) # 标准差
table(scores$Chinese) # 各个分数出现的频次
# names函数是获取列名,which.max找出频次最大的列
names(table(scores$Chinese))[which.max(table(scores$Chinese))] # 众数# 统计图
plot(scores$Chinese,type='o') # 画散点图,type='o'表示把点连起来
chn_factor = factor(scores$Chinese) # 变成因子类型
plot(chn_factor) # 分数直方图
# 108分及以上为优秀,102-107分为良好,其余为及格
cut_factor = cut_factor = cut(scores$Chinese, breaks=c(88,101,107,120),labels=c('及格','良好','优秀'),include.lowest=TRUE)
plot(cut_factor) # 区间分布直方图# 单个学生的成绩
scores[1,] # 查看第一位学生的成绩
sum(scores[1,2:4]) # 第一位学生的总分,列应只包括第2-4列,因为第一列为id,不是成绩
4、结果


R语言七天入门教程七:项目实战相关推荐

  1. (生物信息学)R语言与统计学入门(七)—— 一元线性回归分析

    我们之前讲过相关性分析,生物信息学常见的相关性分析是pearson相关和spearman相关. (生物信息学)R语言与统计学入门(六)-- Pearson和Spearman相关性分析_Lijingxi ...

  2. R语言 零基础入门教程第11章 Rattle可视化数据挖掘工具(1)Rattle简介及安装 功能预览 数据导入 数据探索 数据建模 模型评估 Rattle实例

    关注公众号凡花花的小窝,收获更多的考研计算机专业编程相关的资料 本章内容 Rattle简介及安装 功能预览 数据导入 数据探索 数据建模 模型评估 Rattle实例 本章目标 了解Rattle的安装及 ...

  3. R语言七天入门教程六:文件相关操作

    R语言七天入门教程六:文件相关操作 一.文件的读写 R 语言作为统计学编程语言,常常需要处理大量数据,而这些数据通常会从文件中进行读取,因此文件读写在R语言中是非常重要的操作.在R语言中,用到最多的文 ...

  4. R语言七天入门教程二:认识变量与运算符

    R语言七天入门教程二:认识变量与运算符 一.什么是变量 1.变量 顾名思义,我们可以将变量理解为"可以改变的量",是计算机语言中能储存计算结果或能表示值的抽象概念.这里的值可以是数 ...

  5. R语言七天入门教程三:学习基本结构

    R语言七天入门教程三:学习基本结构 一.编程的语言的基本结构 1.三种基本结构 绝大多数编程语言,都有三种最基本的程序结构:顺序结构.分支结构.循环结构.这三种结构的流程图如下所示(从左至右依次为:顺 ...

  6. R语言七天入门教程五:认识并使用函数

    R语言七天入门教程五:认识并使用函数 一.什么是函数 在编程语言中,如果有一段代码需要在多次重复使用,除了复制粘贴外,还可以将其写成一个函数.函数可以很方便地实现代码复用,对于复杂的程序功能,可以将其 ...

  7. 大数据分析R语言tidyverse数据清洗工具教程

    凌乱的数据集无处不在.如果要分析数据,不可避免地需要清理数据.在大数据分析R语言tidyverse数据清洗工具教程中,我们将研究如何使用R和一些漂亮的tidyverse工具来做到这一点. 该tidyv ...

  8. R语言时间序列ARIMA新手教程

    R语言时间序列ARIMA新手教程 首先说一下ARMA回归的底层逻辑,所谓的AR模型和MA模型都是ARMA模型的一种特殊情况,有点类似正方形和长方形都是矩形.ARMA模型的表达式为: p为自回归部分的滞 ...

  9. R语言基础知识入门学习(一)

    目录 系列文章目录 一.软件下载 二.基本知识 1. 对象 2. 向量 3. 向量化 4. 因子 总结 系列文章目录 R语言基础知识入门学习(一) 一.软件下载 我们可以通过这个网址对R语言软件进行下 ...

  10. R语言学习笔记——入门篇:第一章-R语言介绍

    R语言 R语言学习笔记--入门篇:第一章-R语言介绍 文章目录 R语言 一.R语言简介 1.1.R语言的应用方向 1.2.R语言的特点 二.R软件的安装 2.1.Windows/Mac 2.2.Lin ...

最新文章

  1. vue-music 音乐网站
  2. ArcGIS10新功能之制作地图集
  3. python数组和列表_Python-01矩阵、数组和列表等的总结
  4. Linux进程间通信五 Posix 信号量简介与示例
  5. oracle PL/SQL
  6. CyclicBarrier:人齐了,老司机就发车了!
  7. anacoda2如何连接使用mysql_Anaconda 安装 Python 库(MySQLdb)的方法-(转)
  8. Apache Kafka 迎来了“后浪”
  9. vim 之cscope的使用
  10. 【入门篇】黑盒测试基础
  11. 简单介绍如何用Reporting Service制作报表
  12. QCC3003x BLE 设置私有地址
  13. 海康视频的4G接入-实时浏览
  14. 1、spring源码解析之概况流程
  15. 8700K + z370 安装黑苹果 Mojave
  16. 软件设计·体系结构设计(Architectual Design)
  17. 图片太大怎么改小kb?简单的图片压缩方法分享
  18. 微信开发 现金红包、裂变红包、企业付款
  19. ARM Translation 下载 | ARM Translation Download
  20. 认识电脑的各大组件 【主板、CPU、内存条、硬盘、显卡、显示器】

热门文章

  1. android问号icon,CSS3 动态问号图标(使用工具生成)
  2. 有赞搜索系统的架构演进
  3. [Power--IC]电源管理IC-STNS01
  4. 深度残差网络+自适应参数化ReLU激活函数:调参记录2
  5. c语言 tc 编译,用Win-TC编译与用TC2.0编译的差异
  6. android:persistent属性研究
  7. 纵横算法之三:算法到底考什么
  8. 别说理科男不懂撩妹,这个老司机一生只爱两样:物理和18岁的少女
  9. 栈的初识(C语言)(1)
  10. xUtils框架t网络加载图片 结合SwipeRefreshLayou下拉刷新