R基础知识
包的安装,载入,查找,更新,卸除加载的包,删除包
功能 | 函数 |
---|---|
安装 | install.packages(“包名”) |
查找 | library() 可以查找所有已经安装的包 |
载入 | library(“包名”) |
卸除加载的包(并未删除) | detach(“包名”) |
更新 | updata.packages(“包名”) |
删除 | remove.packages(“包名”) |
查看帮助信息
函数 | 用途 | 实例 |
---|---|---|
help.start() | 直接进入一个帮助文档的总页面 | help.start() |
help(函数名)/?函数名 | 显示该函数的帮助页面,但是有时候寻找的只是已经载入的包中,可以加上 try.all.packages=TRUE 来让它搜索所有的包。同时对于某些特殊的函数必须使用双引号,比如if等。 |
help(mean) help(“bs”) No documentation for ‘bs’ in specified packages and libraries:you could try ‘??br’ help(“bs”,try.all.packages=TRUE) Help for topic ‘bs’ is not in any loaded package but can be found in the following packages: Package Library splines D:/R/R-3.6.3/library |
apropos(“字符串”) | 搜索含有该字符串的函数的帮助文档,但是只是在已经安装的包中寻找 | apropos(“means”) |
help.search(“字符串”) | 列出所有在帮助页面中含有该字符串的函数,不仅仅是名字 | help.search(“mean”) |
find(“函数名”) | 找出含有该函数的程序包 | find(“mean”) r$> find(“mean”) [1] “package:Matrix” “package:base” |
变量,常量和赋值
r是基于对象的语言,变量名实际就是对象名。
变量名由点号,下划线,字母,数字组成,以字母或下划线开头,或者在这两个前面加个点号也行。
有了变量就可以赋值,可以用 =,-> ,<- 来赋值。
常量就是不变的值。
运算符与运算函数
运算符是特殊的函数,分为算数运算符,比较运算符,逻辑运算符,赋值符,和其他运算符。
算数运算符>比较运算符>逻辑运算符>赋值符
算数运算符中:指数>乘除>加减
比较运算符:无大小
逻辑运算符:!>&>| 非大于并大于或
常见运算符:
符号 | 含义 | 实例 |
---|---|---|
算数运算符 | ||
+,- | 加,减 | |
*,/ | 乘,除 | 5/3 为浮点数 |
%% | 求余 | |
%/% | 求整 | 5%/%3 为 1 |
^ | 幂 | |
比较运算符 | ||
>,<,>=,<=,==,!= | 大于,小于,大于等于,小于等于,等于,不等于 | |
逻辑运算符 | ||
! | 非,取逻辑值的反运算 | !TRUE |
& | 并,比较的对象全为真才是真 | TRUE&FALSE [1] FALSE c(TRUE,TRUE)&c(TRUE,FALSE) [1] TRUE FALSE |
&& | 如果比较的是向量只比较第一组值。 | c(TRUE,TRUE)&&c(TRUE,FALSE) [1] TRUE c(FALSE,TRUE)&&c(TRUE,FALSE) [1] FALSE |
| | 或 | |
|| | 如果比较的是向量只比较第一组值。 | |
xor | 异或,两个逻辑值不一致时为真 | xor(TRUE,FALSE) [1] TRUE |
赋值符 | ||
=,<- | 赋值 | |
其他运算符 | ||
$ | 提取符 | |
%*% | 矩阵相乘 | |
all() | 一个向量中所有值全为真则为真 | |
any() | 一个向量中有值为真则为真 |
常用运算函数:
x=c(1,2,3,4)
x2=c(5,6,7,8)
y=matrix(c(1,2,3,4,5,6,7,8),2,4)
y2=matrix(c(3,8,5,7,3,6,7,4,2),3,3)
z=c('a','c','b')
函数 | 功能 | 实例 |
---|---|---|
sum(x) | 求和 | sum(x) 10 sum(y) 36 |
range(x) | 查看数值的范围 | range(z) [1] “a” “c” range(x) [1] 1 4 range(y) [1] 1 8 |
length(x) | 返回数据长度 | r$> length(x) [1] 4 length(y) [1] 8 |
prod(x) | 序列中所有值相乘 | prod(x) [1] 24 prod(x,x2) [1] 40320 prod(y) [1] 40320 |
mean(x) | 求所有值的平均值 | mean(x) [1] 2.5 mean(y) [1] 4.5 |
max(x) | 求最大值 | max(z) [1] “c” |
median(x) | 中位数 | median(z) [1] “b” |
min(x) | 求最小值 | |
cov(x,y) | 求协方差 | 矩阵每一列是一个变量 cov(y2) [,1] [,2] [,3] [1,] 6.333333 -5.166667 -3.166667 [2,] -5.166667 4.333333 1.833333 [3,] -3.166667 1.833333 6.333333 |
cor(x,y) | 求两个变量之间相关系数 | |
var(x) | 对矩阵求协方差,对向量求方差 | var(y2) [,1] [,2] [,3] [1,] 6.333333 -5.166667 -3.166667 [2,] -5.166667 4.333333 1.833333 [3,] -3.166667 1.833333 6.333333 var(y2[,1]) [1] 6.333333 |
cor(x) | 求矩阵的相关系数 | cor(y2) [,1] [,2] [,3] [1,] 1.0000000 -0.9862414 -0.5000000 [2,] -0.9862414 1.0000000 0.3499566 [3,] -0.5000000 0.3499566 1.0000000 |
which.max(x) | 返回第一个最大值的位置 | which.max(y2) [1] 2 which.max(c(1,2,2,1)) [1] 2 |
which.min(x) | 返回第一个最小值的位置 | |
round(x, n) | 转置 | |
pmin(x,y,…) | 对所有向量或矩阵的值进行比较,长度不等可以循环,取较小的值组成一个与最长长度相同的向量 | pmin(x,x2) [1] 1 2 3 4 pmin(y,y2) [1] 1 2 3 4 3 6 7 4 1 |
pmax(x,y,…) | 返回所有最大值 | |
rev(x) | 倒序 | rev(x) [1] 4 3 2 1 rev(y2)[1] 2 4 7 6 3 7 5 8 3 |
sort(x) | 排序 | sort(y2) [1] 2 3 3 4 5 6 7 7 8 |
cumsum(x) | 累加 | cumsum(x) [1] 1 3 6 10 |
rank(x,ties.method=?) | 对一维数组或向量进行排序,给每个值赋予一个排名,对相同值排名有五种规则(first:从小到大,相同值先出现的小,max:取最好水平,min:取最差水平,average:取平均水平,random:随机排名) | rank(c(6,9,10,3,9,5),ties.method=?) “first”:3 4 6 1 5 2 “max”:3 5 6 1 5 2 “min”:3 4 6 1 4 2 “average”:3.0 4.5 6.0 1.0 4.5 2.0 “random”:3 5 6 1 4 2 |
cumprod(x) | 累乘 | cumprod(x) [1] 1 2 6 24 |
log(x,base) | 求对数 | log(5,80) [1] 0.3672816 log(80,5)[1] 2.722706 |
cummin(x) | 输出目前为止碰到的最小值,如果后面碰到了更小的,就变成更小的值,依次往下推 | cummin(y2) [1] 3 3 3 3 3 3 3 3 2 cummin(c(3,5,2,4,1,0)) [1] 3 3 2 2 1 0 |
cummax(x) | 输出目前为止碰到的最大值,如果后面碰到了更大的,就变成更大的值,依次往下推 | |
scale(x,center,scale) | 规范化处理,归1化。center为true时,减去均值,false不减;scale为true时除标准差,false不除。两个值默认都为true,所以x_i=(x_i-mean(x))/sd(x) | ) |
unique(x) | 去除掉重复元素的向量数据框或数组 | unique(c(1,3,3,7,5,4)) [1] 1 3 7 5 4 unique(matrix(c(1,2,1,3,5,3),3,2)) [,1] [,2] [1,] 1 3 [2,] 2 5 矩阵去掉的是重复行 |
match(x,y) | 返回x中元素在y中的位置,有的返回位置,没有的返回na | match(c(3,1),c(1,3)) [1] 2 1 match(c(4,3),c(4,1)) [1] 1 NA |
sample(x,size) | 从向量或数据框等中随机抽取n个数 | sample(x,2) [1] 3 1 sample(y,2) [1] 4 3 sample(y,2) [1] 6 4 |
which(x == a) | 返回所有等于a的值的位置 | which(y2==3) [1] 1 5 which(x==2) [1] 2 |
文件读写
设定路径
利用getwd函数获取当前路径 利用setwd函数,设定路径,之后的路径如果不设置就是默认在这个路径下,如果设置了其他的,可以是跟在这个路径之后。也可以是一个跟这个路径无关的新路径。
getwd()#"C:/Users/WangChengLong/Desktop/R/R总结"
## [1] "D:/Rblog/rblog/content/R/R入门"
# setwd("D:/code")#setwd("D:\\code")正斜杠或双反斜杠
# read.csv(file="data/GDP.csv")#D:/code/data/gdp.csv
# read.table("Rtest.txt")#D:/code/Rtest.txt
# read.csv(file="D:/R/data/shop.csv")
读取纯文本文件
并不是单纯的纯文本,而是有一定格式的纯文本。并不是文章之类的文本。
函数 | 使用 | 实例 |
---|---|---|
read.table() | 以数据框的形式读取具有多列表格形式的文件数据 file∶文件路径 header∶逻辑值,用于指出文件的第一行是否为数据变量的名字。一般默认为header=F。如果第一行比其他行少一列,则默认第一列为行名,第一行为列名。 sep∶字符型,数据的分隔符。默认情况下,sep=““,此参数用于指定数据文件中每行中数据之间使用的分隔符。 quote∶指定包围字符型数据的字符。默认情况下,字符串可以被”或’括起,并且两种情况下,引号内部的字符都作为字符串的一部分。 dec∶字符型,制定小数点字符,默认为”.”一般不用修改. row.names∶保存行名的向量。未定义时以1、2、3、4.…代替. col.names∶指定列名的向量。缺省情况下是用”V”加上列序构成,即V1,V2,V3. nroWS∶整型数,用于指定从文件中读取的最大行数。 skip∶整型数,读取数据时从前面开始忽略的行数。 |
read.table(file=“D:/R/data/house.data.txt”,sep=““,nrows=5) read.table(file=”D:/R/data/house.data.txt”,sep=““,header=T,nrows=2) read.table(file=”D:/R/data/house.data.txt”,header=T,nrows=5,quote=“"’”) |
read.csv() | 以数据框的格式读取逗号分隔的数据文件,默认header | |
=TRUE。是read.table的变形 | read.csv(file, header = TRUE, sep =“,”,quote=“"”,dec =“.”,…) | |
read.csv2() | 以数据框的格式读取分号分隔的数据文件,默认header | |
=TRUE。是read.table的变形 | read.csv2(file, header = TRUE, sep =“,”,quote=“"”,dec =“.”,…) | |
scan() | 在R语言中可以使用scan()函数从文本文件中读取数据或从键盘直接获取用户输入的数据。 scan(file =“, what = double(), sep =”“, quote, |
deC =“.”,skip= 0,nlines=0,…)
file∶用于指定要读取文件的路径和名字,如果为空或”“,则是要从键
盘中获取数据。
what∶用于给出要读取的数据的类型,支持的数据类型包括∶logical,,
integer, numeric, complex, character以及list。
sep∶用于指出文件中数据的分隔符,Scan默认数据是以空白进行分
隔。
quote∶制定包围字符型数据的字符。
dec∶字符型,制定小数点字符,默认为”“。
skip∶用于指定读取数据时,忽略文件前面的行数.
nlines∶指定要读取文件中数据的最大行数。
|
回车之后再回车代表输入的结束
read.fwf()|可以用来读取每一列数据宽度固定的数据
read. fwf(file, widths, header =FALSE, sep =”
skip=0, row.names, col.names,…)
|
读取excel数据
读取R中数据集
- 使用
data()
可列出R中自带的全部的数据集 - 某些数据集存在某些包中,导入包后,还需要使用data(数据集名)来加载数据集,如
data(package="survival")
其他格式数据的读取
写数据
写数据分为两种,一种是存入已有的文件中,一种是创建新的文件
函数 | 参数 | 实例 |
---|---|---|
write.table | 写纯文本数据,新文件 write.table(gnp,file=“…\lecture 2\GNP.txt”) |
|
write.csv | 写excel数据,新文件 write.csv(gnp,file=“…\lecture 2\GNP.csv”) |
|
write() | 既可以新文件,也可以写入,取决于append参数 X∶数据,通常是矩阵、向量等。 file∶是文件名 append∶默认为FALSE,append=TRUE指在原文件上填加数据 |
|
sink | 之后输出的数据会被输出到该文件中。如果是一个新文件那么之后的输出都会显示在里面。不管append的T或F;但是如果是一个已有文件,那么如果不设置append=T,那么源文件中原本存在的都会被删除或者说替代。之后的所有输出还是出现在文件中 sink(file=““,append=FALSE,…) |
sink(file=“data/sink1.txt”,append=F) print(x) print(x) print(x) 第一次运行改程序,会创建一个新的sink1.txt文件,在里面输入三个x数据。但是在第二次运行时,里面不是6个,依然是三个,因为append是false,原来的被清除了。 |
cat() | 既能输入到屏幕也能输入到文件中,取决于有无设置file属性 cat(…,file =““, sep =”“,append=F) |
数据类型和类型转换
数据类型
- 数值型(numeric) 1e23,inf,-inf,NaN表示不是数字的
5/0,inf+inf为inf;inf-inf,0/0的结果为NaN。 - 逻辑型(complex) 包括FALSE,TRUE,和NA(缺失值)
- 复数型(logical)
- 字符型 (character)单或双引号包括
数据对象
列表可以看成数据框的一列,向量,矩阵,数组可以是一维二维和多维的关系。
对象的属性
对象有内在属性(类型(mode)和长度)和其他属性(维度(dim)和类(class)等),可以用一些函数查看对象的属性。
mode(x) 查看数据对象类型
length(x) 查看数据对象长度
attributes(x) 查看数据对象其他属性,不包括mode和length
attr(x,属性名称) 可以查看对象某一属性
attr(x,“names”)=?? 为对象的names属性更改值或者为对象x添加names属性。
x=c(NA) attr(x,“mode”) #NULL
数据类型判断和转化
x=c(NA)
#判断:
is.numeric(x)#F
is.character(x)#F
is.logical(x)#T
is.complex(x)#F
# 转化
y=as.numeric(x)
mode(x)#x类型并没有变
mode(y)#y类型变化,为数值型的NA
y#NA
- is.nan 检测数据是否不确定,true为不确定
- is.infinite 监测数据是否为无限值。true为无限
- is.finite 检测数据是否为有限值,true为有限
is.na
判断数据是否存在缺失值
控制符和循环
分支语句
分支语句是用来判断的,条件满足则执行,条件不满足则不执行。
主要有下面五种
语句 | 使用 |
---|---|
if语句 | if()每个if语句只要条件满足就会执行 |
if ……else…… |
if条件满足执行if下的语句,否则执行else下的语句 |
ifelse | ifelse(?,x,y)满足条件为x,不满足为y,返回结果的长度和判断生成的逻辑值数目一致。有多少个逻辑值。就会返回多少个结果。 ifelse(?,c(),c()),满足时,取第一个向量的第i个,否则取第二个向量的第i个,向量中的元素可以循环取。 |
if …… else if ……else if ……else |
只要有一个条件满足,其他条件就不会再执行。 |
switch | switch(con,list)或 switch(con,case1,case2,case3,…) switch是多分支语句,一次只能比较一个变量,比较的可以是下标,如,1,2.如果下标范围在列表长度内,返回对应位置元素,否则什么都不返回。如果列表元素是有names的,则还可以通过names比较。 |
注意:
else或else if不可前面无其他内容,也就是不可以另起一行或者放在开头,一般是放在上一个if的内容后面
ifelse 与 if else的区别:
ifelse(con,expr1,expr2)中的条件判断中可以得到多个逻辑结果,有多少个逻辑结果,ifelse()的返回值就有多少个元素,且不同的逻辑结果取不同的值。
if(con) expr1 else expr2中的条件判断中只得到一个逻辑结果(如果 有多个逻辑结果,会自动取第一个,并抛出警告)。然后根据这个逻辑结果,取后面表达式的值。
if语句各判断条件的位置关系:
if语句可以有零个或一个else,但如果有else if语句,那么else语句必须在else if语句之后。
if语句可以有零或多个else if语句,else if语句必须放在else语句之前。
当有一个else if条件测试成功,其余的else.….if或else将不会被测试。
循环语句
循环语句主要有for,while和repeat循环
语句 | 使用 |
---|---|
for | for(name in expr1)expr2 name 是一个循环变量,expr1是他的取值范围,直到循环结束前,每一次都执行下面的expr2 |
while | while(con)expr con一般是循环终止条件,在expr中一般有变量的循环。运行直到终止条件满足。 |
repeat | repeat expr repeat 是无条件运行expr,而在expr中需要设置满足条件后的break语句,来将整个循环终止。 |
break和next
break将整个循环终止,而next是跳过循环的某一步,执行下一步。
函数
可视化
可视化分为高级作图函数,低级作图函数,图形参数,网格作图,多图。当然还有一些包中的绘图函数是为了特定的需求。
低级作图函数必须建立在已有高级图形的基础上,低级作图函数一般是在高级图形上添加点,线等。
图形参数是用来调整一个图形,比如坐标轴,图例等。
网格作图是为了在一张画布上显示多个图形,有时候会有对比图形的需求。我们需要一些灵活的方式来实现多图。