前言:零基础开始学习的小白,文科生没接触过编程,所以想通过输出倒逼学习,通过简书记录自己的学习过程,已经有很多前辈做了很好的R语言各种教程工作,感谢能站在巨人们的肩膀上开始学习,我参考学习过的链接也会直接附上。输出的内容仅仅是我摸索的过程,以促进学习为出发点,如果也能有幸帮助到后来的小伙伴,也很开心~
笔记目录:
1.0 R及Rstudio的安装和参考文献介绍
1.1 RStudio的用户界面
1.2 运行R命令、创建对象
1.3 使用R函数
1.4 可放回抽样
1.5 编写自定义函数
1.6 为函数自定义参数
1.7 学会使用R脚本编辑代码
1.8 小结
1.0 安装R和RStudio
R安装:https://www.r-project.org/
RStudio安装:https://www.rstudio.com/
可以看下面详细的教程:R 安装详解_CSDN博客
我学习的书是:R语言入门与实践 (ituring.com.cn)
下面的学习主要以这本书的结构和内容安排进行记录,因为纯小白入门,希望刚开始能有一个完整的知识体系。这个过程中也会搜索网络资源进行辅助学习,边练习边记录,希望能比较扎实的学会。
本书设置了三个虚拟的项目,通过R实现开赌场的梦想:
项目1:一对可以用来生成随机数字的骰子(非均匀骰子)
项目2:一副可以用来发牌和洗牌的扑克(玩扑克牌)
项目3:一台模拟真实的视频彩票终端机的老虎机(老虎机)
我觉得这个设计很有趣,也很科学合理,“开赌场”就是一个大项目,具体通过完成一个一个小项目,在这个过程中实践R的基本操作,使得每个操作有一个具体的目标。如果像说明书一样去学习,恐怕很枯燥,很难推进下去。
正如书中所说:
认认真真地跟着本书完成全部三个项目之后,你将掌握数据科学家所必需的专业技能。具体来说,你将学会如何将数据存储到计算机内存中,如何访问计算机内存中的数据,以及如何在必要的时候对内存中的数据值进行转换。你还将学会如何用R编写自己的程序,并将其用于分析数据和运行模拟。(P2)
本章开头第一句话:“本章概述了R编程的基础技能,学完之后你就可以立即上手编写R程序了。”给了我很大的动力和激励,信心满满的开始学习啦!
1.1 RStudio的用户界面
以下是RStudio的基础界面,四个主要的窗口:
R和RStudio都是帮助我们与计算机进行对话的工具。书中一个形象的比喻,RStudio是话筒,而R则是沟通所用的语言。而从界面来看,R是毛坯房,RStudio是精装房,我们从操作更方便,界面更美观的RStudio开始吧~
1.2运行R命令、创建对象
在R语言中,#为注释符号(commenting symbol),#后的内容不会被当作R命令执行。我们在编写程序过程中要养成添加注释的习惯,不然过一段时间再打开,都不知道写的什么了,尤其像我这种小白,一定要边写边注释喽!
和书中保持一致,以下代码中,一个#代表添加的注释,两个#代表程序的执行结果。
在控制台窗口最下面的>提示符后键入代码,即R命令(command),回车后,计算机就会执行该命令。
#我的第一行代码,生成骰子的六个数字
#运算符(:),表示返回两个整数值之间的所有整数,快速生成数字序列(向量)
1:6
##1 2 3 4 5 6
创建R对象:确定一个名称,将数据用赋值符号(<-)赋值给它,快捷键Alt+-。
- 创建的R对象会显示在右上方的环境窗口,这里会显示最近一次打开RStudio创建的所有R对象。
- 也可以用ls命令,查看已经命名的哪些R对象。
ls() - R对象命名规则:不能以数字开头;不能有特殊符号,如
!$^@*&等;同时区分大小写,name和Name是两个不同的对象。 - R可以自由运算,也可以以对象进行整体运算,R采用元素方式执行运算(相同的运算应用于该数字集的每个元素)
#创建一个对象,die(骰子)
die <- 1:6
#查看储存内容,输入名称,回车
die
## 1 2 3 4 5 6
#元素方式运算
die-1
## 0 1 2 3 4 5
die/2
## 0.5 1.0 1.5 2.0 2.5 3.0
#两个向量的运算,R会执行向量的每个元素对应运算,产生同样长度的新向量。
die*die
## 1 4 9 16 25 36
#如果两个向量长度不相等,会重复运算较短的向量(向量循环);
#如果长向量不是短向量长度的整数倍,R会返回警告信息。
die + 1:2
## 2 4 4 6 6 8
die + 1:4
## 2 4 6 8 6 8
## Warning message:
## In die + 1:4 : 长的对象长度不是短的对象长度的整倍数
1.3使用R函数
我们已经创建了一个虚拟骰子,如何实现随机抽样呢?这个时候就需要用到R函数。
- R函数的使用方法:名称+(),()可以看作函数“触发器”。
- 如果键入一个函数没有加(),R会展示这个函数所存储的代码。
- 函数中的数据该函数的参数(argument),参数可以是原始数据、R对象、另一个R函数的返回结果(执行方式从内到外)。
-
sample(随机抽样)这个函数,可以帮助我们模拟掷骰子。
#R函数的执行方式是从内到外。如,下面例子R先找到die这个对象,然后计算6个数值的平均值,再进行四舍五入。
round(mean(die))
## 4
sample(x=die,size=1)
sample(die,size=1)
sample(die,1)
## 3
- 以上三行命令效果都是一样的,一般前面1-2个很熟悉的参数,可以不写参数名称,R会根据参数顺序自动识别)
- 如果不知道如何设置函数的参数,可以用
args函数查看参数。
args(sample)
## function (x, size, replace = FALSE, prob = NULL)
#sample默认为不可放回抽样,即replace = FALSE。因此如果同时抽取两个数,不可能相同。
#将replace改为TRUE,设定为可放回抽样,才可以真正模拟骰子。
1.4 可放回抽样
下面模拟一对骰子的投掷,并计算两个骰子点数的和(随机可放回抽样):
sample(die,size=2,replace=TRUE)
#将这一对模拟的骰子创建为R对象dice,把抽取骰子的这组结果保存到对象中,结果就不会改变了。
dice <- sample(die,size=2,replace=TRUE)
dice
sum(dice)
## 9
1.5 编写自定义函数
接下来,我们把刚才模拟掷一对骰子的R程序进行打包,生成一个新的函数roll,这样每次重新投掷就变得更加方便。每次调用roll()函数,R都会返回两个骰子点数的和。
为什么要自定义函数?
- 自定义的函数和R中的其他函数没有任何区别。
- 可以随时按照自己的需求创造出新的、定制化并且可以重复使用的工具。
- 就像在excel中增加一个自定义选项加入菜单栏,但我们没办法完全自定义程序。
如何自定义函数?
- R函数实际上就是一种不同类型的R对象。
- 任何一个函数包含三部分:函数名、程序主体、参数集合。
- 编写自定义函数只需要把这三部分内容定义好,并存储在一个R对象之中。
- 函数构建器:这里用到
function()函数。funtion()函数+{},可以将后面{}的所有代码构建成一个新的函数。
构建函数流程.png(P20)
roll <- function(){
die <- 1:6
dice <- sample(die,size=2,replace=TRUE)
sum(dice)
}
roll()
## 6
1.6为函数自定义参数
你可以在自定义函数中设置任意数量的参数,只要在function后的括号中列出它们的名称,并且用逗号隔开即可。
- 设置参数的好处是,可以调用任意范围内的值,如
sample在任意范围内进行随意抽样。 - 如果没有设置参数值,那么R会用该参数的默认值代替(前提是在定义函数时设置了该参数的默认值)。
#增加这个参数的好处是,bones可以设置为任意范围数列,可以投掷不同类型的骰子。
roll2 <- function(bones){
dice <- sample(bones,size=2,replace=TRUE)
sum(dice)
}
roll2(bones = 1:6)
## 8
#可以给bones设置一个初始默认值。
roll2 <- function(bones = 1:6){
dice <- sample(bones,size=2,replace=TRUE)
sum(dice)
}
roll2()
## 7
1.7学会使用R脚本编辑代码
我们在控制台编辑的命令和创建的函数,如果想编辑和重复使用,用R脚本(script)创建代码草稿,会非常便捷和方便。
- 创建方式:File>New File >R Script
- 运行脚本:Ctrl+回车,可以实现Run的功能,默认运行鼠标光标所在的行。用鼠标选中一段代码,便会运行这段代码。
使用编程脚本文件的好处:
1. 可中断性
第一天编辑的工作保存脚本文件,第二天可以在第一天基础上继续编写程序。有时候开始一个项目,每次关开界面需要很大的勇气,很多操作都得从头再来。
2. 可再现性
脚本文件使做得所有工作有记录可查,很强的可再现、可重复性,对于很多科研项目需要不算重复调试,是很大的帮助!
3. 便于交流分享
可以把脚本分享给别人,适合团队工作,可以减少很多重复性工作。
1.8小结
学完这一章,已经打好了R初步操作的基础,已经在计算机中存储了一对虚拟的骰子(dice)和模拟骰子骰子的roll函数,能够初步通过R语言和计算机交流了。但今天看一个教程视频,up主说:“敲1万行代码才可能入门!”第一章,我敲了75行代码(加注释),慢慢积累嘛,已经走出最难的第一步啦!
总结:R语言最重要的两个组成部分:
- 对象:用来存储数据;
- 函数:用来操作分析数据。
- R还使用+、-、*、/和<-、:等运算符来完成基本的任务。
通过本章,我们已经能够利用R对象在计算机中存储数据,并通过R函数将一些复杂的计算任务自动化。
