R 软件安装和使用
要愉快地使用R, 我们需要走两步:
到这个网站 CRAN(Comprehensive R Archive Network)http://www.r-project.org/ ,下载R程序。 Linux、Mac OS X和Windows都有相应的版本,根据你的电脑系统,选择对应的安装包,下载安装即可。 如果你找不到程序位置,那么请看这里http://ftp.ctex.org/mirrors/CRAN/
到Rstudio官网http://www.rstudio.com/ide/download/,下载Rstudio程序,选择desktop那种,免费的就够用了。
一般来说,我们不在R里面直接操作,在安装R以后,我们在安装Rstudio,在Rstudio里完成我们所有的工作。 R 与 RStudio 是什么关系呢?你可以简单的理解为,RStudio 是话筒,而 R 则是沟通所用的语言
R是一种区分大小写的解释型语言。你可以在命令提示符(>)后每次输入并执行一条命令,或者一次性执行写在脚本文件中的一组命令。R中有多种数据类型,包括向量、矩阵、数据框(与数据集类似)以及列表(各种对象的集合)。
也可以当作最基本的计算器来使用。
基本界面

修改包的安装地址
- 由于默认包的安装地址不在中国,有时候安装速度会很慢,或无法安装成功,因此我们可以修改为中国的,推荐可以使用中科大或者清华的,都比较稳定

基本操作
基本运算
- 加: +
- 减: -
- 乘: *
- 除: /
- 乘方: ^
- 均值:mean()
- 方差:var()
- 标准差:sd()
- 中位数:median()
- 百分位数: quantile()
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiI3KzhcbjYtN1xuMTAqMTJcbjgvN1xuNl4yXG5zcXJ0KDgpXG5cbm1lYW4obXRjYXJzJG1wZylcblxudmFyKG10Y2FycyRtcGcpXG5cbnNkKG10Y2FycyRtcGcpXG5cbm1vZGUobXRjYXJzJG1wZylcblxucXVhbnRpbGUobXRjYXJzJG1wZykifQ==
mtcars: The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973–74 models).
mtcars function - RDocumentation
mpg: Miles/(US) gallon; 英里/每加仑 wt: Weight (1000 lbs); 重量(1000磅)
赋值
R使用<-或=作为赋值符号。
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJteV92YXI8LTQyXG5teV92YXIifQ==
对象
一个对象可以是任何能被赋值的东西。对于R来说,对象可以是任何东西(数据、函数、图形、分析结果,等等)
c() 这个函数
我们也可以使用c() 这个函数 function(c 意指是 combine)来赋值,它把多个对象放到一起,组成向量。
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsdWNreV9udW1iZXJzIDwtIGMoOCwgODgpXG5sdWNreV9udW1iZXJzIn0=
注释
- 注释由符号#开头。在#之后出现的任何文本都会被R忽略而不运行。
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIDIrMyJ9
帮助查询
- 输入?c 或者help(c),在RStudio 右下角的介面 召唤出帮助文件 Help。
功能包
上面的c()是我们遇到的第一个函数,我们以后还会遇到许许多多的函数。而功能包则是函数的有机组合,以实现更丰富的功能。
R自带了一系列默认包(包括base、datasets、utils、grDevices、graphics、stats以及methods),它们提供了种类繁多的默认函数和数据集。
其他包则按需要调用:先安装,再载入,然后就可以使用啦!
安装功能包的函数 install.packages()
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJpbnN0YWxsLnBhY2thZ2VzKFwiZHBseXJcIilcbmluc3RhbGwucGFja2FnZXMoXCJnZ3Bsb3QyXCIpXG5saWJyYXJ5KGRwbHlyKVxubGlicmFyeShnZ3Bsb3QyKSJ9
一个包仅需安装一次。但和其他软件类似,包经常被其作者更新。使用命令update.packages()可以更新已经安装的包。
然后我们就可以愉快的使用包了,具体来说里面的各种函数和数据。包中往往提供了演示性的小型数据集和示例代码,能够让我们尝试这些新功能。
使用 help(package="package_name")可以查看某个包的简短描述以及包中的函数名称和数据集名称的列表。使用函数help()可以查看其中任意函数或数据集的更多细节。
查看路径和设置路径
路径(工作路径)是我们读取数据和存贮结果的地方。
在自己的RStuido的 concole 输入: getwd() 查看自己的当前路径。 setwd(yourpath) 设置想要的路径。
或者使用RStudio右下方,Files这个tab里的齿轮来查看和更改。
例子:设置工作路径
使用setwd(“mypath”), 建立指向该文件夹的工作路径。
mypath就是文件夹的绝对地址,例如:D:\Downloads\Documents。当然也可以用相对地址(相对于当前RStudio项目的位置)。
数据类型
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIENoYW5nZSBteV9udW1lcmljIHRvIGJlIDQyXG5teV9udW1lcmljIDwtIDQyXG5cbiMgQ2hhbmdlIG15X2NoYXJhY3RlciB0byBiZSBcInVuaXZlcnNlXCJcbm15X2NoYXJhY3RlciA8LSBcInVuaXZlcnNlXCJcblxuIyBDaGFuZ2UgbXlfbG9naWNhbCB0byBiZSBGQUxTRVxubXlfbG9naWNhbCA8LSBGQUxTRSJ9
如何判断数据类型?
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiIjIERlY2xhcmUgdmFyaWFibGVzIG9mIGRpZmZlcmVudCB0eXBlczpcbm15X251bWVyaWMgPC0gNDJcbm15X2NoYXJhY3RlciA8LSBcInVuaXZlcnNlXCJcbm15X2xvZ2ljYWwgPC0gRkFMU0VcblxuY2xhc3MobXlfbnVtZXJpYylcbmNsYXNzKG15X2NoYXJhY3RlcilcbmNsYXNzKG15X2xvZ2ljYWwpIn0=
因子 factor
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJleGNlbGxlbmNlPC0gYyhcImV4Y2VsbGVudFwiLCBcImJhZFwiLCBcImdvb2RcIiwgXCJva2F5XCIsIFwiYmFkXCIpXG5leGNlbGxlbmNlXG5cbmV4Y2VsbGVuY2U8LSBmYWN0b3IoZXhjZWxsZW5jZSlcbmV4Y2VsbGVuY2VcblxuZXhjZWxsZW5jZSA8LSBmYWN0b3IoZXhjZWxsZW5jZSwgb3JkZXI9VFJVRSxcbiAgICAgICAgICAgICAgICAgICAgIGxldmVscz1jKFwiYmFkXCIsIFwib2theVwiLFwiZ29vZFwiLFwiZXhjZWxsZW50XCIpKVxuZXhjZWxsZW5jZSJ9
这里我们成功的把字符型变量excellence,先转换成了无序因子变量,再转换成了有顺序的因子变量。
数值型变量可以用levels和labels参数来编码成因子。如果男性被编码成1,女性被编码成2,则以下语句:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJzZXg8LWMoMSwyLDIsMSwyLDEsMSwzKSBcbnNleFxuXG5zZXggPC0gZmFjdG9yKHNleCwgbGV2ZWxzPWMoMSwgMiksIGxhYmVscz1jKFwiTWFsZVwiLCBcIkZlbWFsZVwiKSlcbnNleCJ9
在这个栗子里,性别被当成类别型变量,标签“Male”和“Female”替代了1和2在结果中输出,而且所有不是1或2的性别变量将被设为缺失值。
数据结构
基础数据结构:
vector 向量
matrix 矩阵
dataframe 数据集
list 列表
向量
向量是用于存储数值型、字符型或逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量
注意:同一向量中无法混杂不同模式的数据。
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJhIDwtIGMoMSwgMiwgNSwgMywgNiwgLTIsIDQpXG5iIDwtIGMoXCJhcHBsZVwiLCBcInBlYXJcIiwgXCJvcmFuZ2VcIilcbmMgPC0gYyhUUlVFLCBGQUxTRSwgVFJVRSwgRkFMU0UsIFRSVUUsIEZBTFNFKSJ9
通过在方括号中给定元素所处位置的数值,我们可以访问向量中的元素。例如’a[c(2)]’用于访问向量a中的第二个元素。
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJhIDwtIGMoMSwgMiwgNSwgMywgNiwgLTIsIDQpXG5iIDwtIGMoXCJhcHBsZVwiLCBcInBlYXJcIiwgXCJvcmFuZ2VcIilcbmMgPC0gYyhUUlVFLCBGQUxTRSwgVFJVRSwgRkFMU0UsIFRSVUUsIEZBTFNFKVxuXG5hWzNdXG5cbmFbLTNdXG5cbmJbYygxLDMpXVxuXG5jWzI6NF0ifQ==
矩阵
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJteU1hdHJpeCA8LSBtYXRyaXgoMToxNSwgbnJvdz0zLCBuY29sPTUpICBcbm15TWF0cml4In0=
我们可以使用下标和方括号来选择矩阵中的行、列或元素。
X[i, ]指矩阵 X 中的第 i 行
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJ5IDwtIG1hdHJpeCgxOjE4LCBucm93PTIpXG5cbnlcblxueVsyLF1cblxueVssMV1cblxueVsyLCAzXVxuXG55WzIsIGMoMyw1KV0ifQ==
矩阵都是二维的,和向量类似,矩阵中也仅能包含一种数据类型。
数据框
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJzdHVkZW50cyA8LSBjKFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiKVxuc3R1ZGVudHNcbm1hdGhfc2NvcmU8LWMoMTAwLCA4MCwgNzAsIDk1KVxubWF0aF9zY29yZVxuZW5nbGlzaF9zY29yZTwtYyg5NiwgODYsIDc3LCA5OSlcbmVuZ2xpc2hfc2NvcmUifQ==
在这种情况下,使用数据框则会更加方便
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJzdHVkZW50cyA8LSBjKFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiKVxuc3R1ZGVudHNcbm1hdGhfc2NvcmU8LWMoMTAwLCA4MCwgNzAsIDk1KVxubWF0aF9zY29yZVxuZW5nbGlzaF9zY29yZTwtYyg5NiwgODYsIDc3LCA5OSlcbmVuZ2xpc2hfc2NvcmVcblxuc3R1ZGVudHNfc2NvcmVzPC1kYXRhLmZyYW1lKHN0dWRlbnRzLCBtYXRoX3Njb3JlLCBlbmdsaXNoX3Njb3JlKSJ9
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJzdHVkZW50cyA8LSBjKFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiKVxubWF0aF9zY29yZTwtYygxMDAsIDgwLCA3MCwgOTUpXG5lbmdsaXNoX3Njb3JlPC1jKDk2LCA4NiwgNzcsIDk5KVxuXG5zdHVkZW50c19zY29yZXM8LWRhdGEuZnJhbWUoc3R1ZGVudHMsIG1hdGhfc2NvcmUsIGVuZ2xpc2hfc2NvcmUpXG5cbnN0dWRlbnRzX3Njb3Jlc1ssMl1cblxuc3R1ZGVudHNfc2NvcmVzWyxcIm1hdGhfc2NvcmVcIl1cblxuc3R1ZGVudHNfc2NvcmVzJG1hdGhfc2NvcmUifQ==
生成新的数据框
- 例子:生成学生名字变量students和数学成绩变量math的新数据框,
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJzdHVkZW50cyA8LSBjKFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiKVxubWF0aF9zY29yZTwtYygxMDAsIDgwLCA3MCwgOTUpXG5lbmdsaXNoX3Njb3JlPC1jKDk2LCA4NiwgNzcsIDk5KVxuc3R1ZGVudHNfc2NvcmVzPC1kYXRhLmZyYW1lKHN0dWRlbnRzLCBtYXRoX3Njb3JlLCBlbmdsaXNoX3Njb3JlKVxuXG5kYXRhLmZyYW1lKHN0dWRlbnRzX3Njb3JlcyRzdHVkZW50cywgc3R1ZGVudHNfc2NvcmVzJG1hdGhfc2NvcmUpIn0=
list 列表
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJhIDwtIFwiTXkgRmlyc3QgTGlzdFwiXG5iIDwtIGMoMjUsIDI2LCAxOCwgMzkpXG5jIDwtIG1hdHJpeCgxOjEwLCBucm93PTUpXG5kIDwtIGMoXCJvbmVcIiwgXCJ0d29cIiwgXCJ0aHJlZVwiKVxuXG5teWxpc3QgPC0gbGlzdCh0aXRsZT1hICxiLGMsZClcbm15bGlzdCJ9
本例创建了一个列表,其中有四个成分:一个字符串、一个数值型向量、一个矩阵以及一个字符型向量。可以组合任意多的对象,并将它们保存为一个列表。
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJjYXJzIDwtIGxtKGZvcm11bGEgPSB3dH5tcGcsIGRhdGEgPSBtdGNhcnMpXG5zdW1tYXJ5KGNhcnMpIn0=
常用函数
length(object) :显示对象中元素的数量
dim(object): 显示某个对象的维度
str(object) :显示某个对象的结构
class(object): 显示某个对象的类或类型
names(object):显示某对象中各成分的名称
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJsZW5ndGgobXRjYXJzKVxuXG5sZW5ndGgobXRjYXJzJG1wZylcblxuZGltKG10Y2Fycylcblxuc3RyKG10Y2FycylcblxuY2xhc3MobXRjYXJzKVxuXG5uYW1lcyhtdGNhcnMpIn0=
c(object, object,...): 将对象合并入一个向量
cbind(object, object, ...): 按列合并对象
rbind(object, object, ...): 按行合并对象
head(object):列出某个对象的开始部分
tail(object):列出某个对象的最后部分
ls(): 显示当前的对象列表
rm(object, object, ...): 删除一个或更多个对象
rm(list = ls()):将删除当前工作环境中的几乎所有对象
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJjKDIsIDIwKVxuXG5jYmluZChzdHVkZW50cywgbWF0aF9zY29yZSlcblxucmJpbmQoc3R1ZGVudHMsIG1hdGhfc2NvcmUpXG5cbmhlYWQobXRjYXJzKVxuXG50YWlsKG10Y2FycylcblxubHMoKVxuXG5ybShhLCBiLCBjKVxuXG5scygpIn0=
基本作图
一图胜千言
人类非常善于从视觉呈现中洞察关系。
一幅精心绘制的图形能够帮助你在数以千计的零散信 息中做出有意义的比较,提炼出使用其他方法时不那么容易发现的模式。
R是一个惊艳的图形构建平台。在通常的交互式会话中,我们可 以通过逐条输入语句构建图形,逐渐完善图形特征,直至得到想要的效果。
plot()是R中为对象作图的一个泛型函数(它的输出将根据所绘制对象类型的不同而变化)。
plot(x, y), 将x置于横轴,将y置于纵轴,绘制点集(x, y),散点图。使用help(plot)可以查看其他选项。
下面的代码打开一个图形窗口并生成了一幅散点图,横轴表 示车身重量,纵轴为每加仑汽油行驶的英里数。
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJwbG90KG10Y2FycyR3dCwgbXRjYXJzJG1wZykifQ==
添加横坐标标签,添加纵坐标标签
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJwbG90KG10Y2FycyR3dCwgbXRjYXJzJG1wZyxcbiAgICAgeGxhYj1cIk1pbGVzIFBlciBHYWxsb25cIixcbiAgICAgeWxhYj1cIkNhciBXZWlnaHRcIikifQ==
添加回归曲线
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJwbG90KG10Y2FycyR3dCwgbXRjYXJzJG1wZyxcbiAgICAgeGxhYj1cIk1pbGVzIFBlciBHYWxsb25cIixcbiAgICAgeWxhYj1cIkNhciBXZWlnaHRcIilcbmFibGluZShsbShtdGNhcnMkbXBnfm10Y2FycyR3dCkpXG50aXRsZShcIlJlZ3Jlc3Npb24gb2YgTVBHIG9uIFdlaWdodFwiKSJ9
改变点的颜色和形状
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJwbG90KG10Y2FycyR3dCwgbXRjYXJzJG1wZyxcbiAgICAgICAgIHhsYWI9XCJNaWxlcyBQZXIgR2FsbG9uXCIsXG4gICAgICAgICB5bGFiPVwiQ2FyIFdlaWdodFwiLFxuICAgICBjb2w9NCxcbiAgICAgcGNoPTE2KVxuYWJsaW5lKGxtKG10Y2FycyRtcGd+bXRjYXJzJHd0KSlcbnRpdGxlKFwiUmVncmVzc2lvbiBvZiBNUEcgb24gV2VpZ2h0XCIpIn0=
有这些形状可以选择:

换一种方式表示,睁大眼睛看区别:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJ3aXRoKG10Y2Fycyx7XG5wbG90KHd0LCBtcGcpXG5hYmxpbmUobG0obXBnfnd0KSlcbnRpdGxlKFwiUmVncmVzc2lvbiBvZiBNUEcgb24gV2VpZ2h0XCIpXG59XG4pIn0=
多图同列
设定全局参数,多图同列, 例如设置2列2行, 四个直方图:

eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJwYXIobWZyb3c9YygzLDEpKVxud2l0aChtdGNhcnMse1xuICBwYXIobWZyb3c9YygyLDIpKVxuICBoaXN0KHd0KVxuICBoaXN0KG1wZylcbiAgaGlzdChkaXNwKVxuICBoaXN0KGhwKVxufSkifQ==
箱线图
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJib3hwbG90KG10Y2FycyRtcGcpIn0=
保存图形
- 通过代码
- 通过图形用户界面,在RStudio的右下角,“Export”即可。
要通过代码保存图形,将绘图语句夹在开启目标图形设备的语句和关闭目标图形设备的语句之间即可。例如,以下代码会将图形保存到当前工作 目录中名为mygraph.pdf的PDF文件中:
eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJwZGYoXCJteWdyYXBoLnBkZlwiKVxuICAgICAgYXR0YWNoKG10Y2FycylcbiAgICAgIHBsb3Qod3QsIG1wZylcbiAgICAgIGFibGluZShsbShtcGd+d3QpKVxuICAgICAgdGl0bGUoXCJSZWdyZXNzaW9uIG9mIE1QRyBvbiBXZWlnaHRcIilcbiAgICAgIGRldGFjaChtdGNhcnMpXG5kZXYub2ZmKCkifQ==
除了pdf(),还可以使用函数win.metafile()、png()、jpeg()、bmp()等将图形保存为其他格式。