一、基本语法语句
1、R语言在线帮助系统(网站)命令:
help.start()、topic、help(topic)、help.search(topic)等命令
2、R中内嵌的帮助工具
命令:?solve()、help(solve)
二、R中数据对象及其类型
基本四种类型
1、数值型
包括整型、单、双精度实型
对象的数据类型和长度可以分别通过mode()和length()得到
⭐️R中可以正确的表示无穷的数值,如用Inf和-Inf表+∞和-∞
2、字符型
用双或单引号界定
⭐️双引号下要引用双引号可以用 \ 转义
3、复数型
一些处理复数的特别的函数
如 Re(z)获取复数实部
4、逻辑型
取非(!)、取与(&和&&)、取或(|和||)
三、对象
1、对各数据对象的说明
向量:一个变量的取值
因子:一个分类的变量
数组:一个多位的数据表
矩阵:数据框
数组和矩阵中所有元素必须为同一类型 ;
数据框由一个 / 几个向量或因子构成,他们必须等长,但可以是不同数据类型
2、对象的显示和删除
显示
①显示所有在内存中的对象(名):ls()
②显示名称中带有指定字符的对象:用pattern属性指定 即 ls(pattern=“m”)
③显示名称中以某个字母开头的对象:ls(pattern=“^m”)
④显示所有对象的详细信息:ls.str()
删除
删除某个对象:rm()
3、R语言中向量
(1)数值型向量
常用四种方法建立:
seq()、rep()、c()、scan()
①seq()或":" :适合较简单规律向量
eg:
> 1:3
[1] 1 2 3
> z<-seq(1,3,by=0.5) 等价于 seq(from=1,to=3,by=0.5)
[1] 1.0 1.5 2.0 2.5 3.0
②rep() :适合较复杂规律的向量
eg:
> z<-rep(2:4,2) 等价于rep(2:5,times=2)
> z [1] 2 3 4 2 3 4
> z<-rep(1:3,rep(2:3)) /3个数,每个重复2/
> z [1] 1 1 2 2 3 3
> z<-rep(1:3,time=3,each=2) /每个数重复2,整体重复3次/
> z [1] 1 1 2 2 3 3 1 1 2 2 3 3
③c():向量没有规律
eg:
> x<-c(5,2,34,20)
> x [1] 3 2 34 20
④scan():通过键盘逐个输入
> z<-scan()
>1:33
>2:45
>3:9
> //两个回车即可结束输入
Read 3 items
>z
[1] 33 45 9
(2)字符型向量
eg:
> z<-("green","red")
函数paste()可以接收任意个数参数,并从中逐个取出字符拼接成字符串,生成字符串个数与参数中最长字符串长度相同
eg:
> z <- paste(c("x","y"),1:3,seq=":") //默认字符串间用空格分隔,且不能接收指定
>z
[1] "x 1" [2] "y 2" [3] "x 3"
(3)逻辑型向量
逻辑型向量值可是TRUE、FALSE、NA
(4)因子型向量
利用函数**factor()**创建,其调用格式如下
factor(x,levels=sort(unique(x),na.last=TRUE),labels=levels,exclude=NA,ordered=is.orderd(x) )
x: 为创建因子的数据,是一个向量;
levels:因子数据的水平,默认是x中不重复的值(即不重复数据个数);
labels:指定水平因子名称,默认取levels的值;
exclude:从x中剔除的水平值,默认为NA值;
ordered:逻辑值,因子水平是否有顺序(编码次序),若有取TRUE,否则取FALSE;
nmax:水平个数的限制。
字符型因子和数值型因子可相互转化
①字符型向量转换为因子
> a<-c("freen","blue","green","yellow") //将向量赋值给a
> a<-factor(a) //将a转化为因子并重新赋值
> a
[1] freen blue green yellow
Levels: blue freen green yellow
②数值型向量转换为因子
> a<-c(1,2,3,2) //将向量赋值给a
> a<-factor(a) //将a转化为因子并重新赋值
[1] 1 2 3 2
Levels: 1 2 3
③字符型因子转化为数值型因子
> a<-c("green","blue","green","yellow")
> a<-factor(a) //转化为因子
> a
[1] green blue green yellow
Levels: blue green green yellow
> levels(a)<-c(1,2,3,4)
> a
[1] 2 1 2 3
Levels: 1 2 3 4
**函数levels()**用来提取一个因子中可能水平数
**函数gl()**可产生规则的因子序列:
gl(k,n) k为水平数;n是每个水平重复的次数;除此外此函数还有可选属性:①length指定产生数据的个数,label指定水平因子的名称
eg1: gl()
> gl(3,4)
[1] 1 1 1 1 2 2 2 2 3 3 3 3
Levels:1 2 3
eg2:带length和label的gl()
> gl(2,3,length=9,label=c("Yes","No"))
[1] Yes Yes Yes No No No Yes Yes Yes
Levels: Yes No
4、向量的运算(略)
5、常见统计函数
向量中 最大元素:max(x) 最小元素:min(x) 最大元素的下标**(R是从1开始)**:which.max(x)
最小元素下标:which.min() 均值:mean() 元素总和:sum(x) 元素乘积:prod(x)
向量长度:length(x) 向量逆序:rev(x)
升序排列:sort(x) 属性decreasing=TRUE表降序 升序的秩(序号):order(x)decreasing=TRUE表降序的秩
向量的秩(未排序的):rank(x)
6、向量的下标与子集(元素)的提取
分4种不同类型来提取
①正整数向量
x[1:4]选取前4个元素; x[c(1,3)]选取第1、3个元素
②负整数向量
x[-(1:4)]去除前4个元素;
③字符型向量:用于提取有names属性并由它来区分(即不能重复names,否则出现混乱情况)向量中元素元素的向量
eg:
> x<-c(1,3,5,7)
> names(x)<-c("red","yellow","blue","green")
> x
red yellow blue green
1 3 5 7
> choiceColor<-x[c("red","blue")]
> choiceColor
red blue
1 5
④逻辑型向量:取出满足条件的元素(即返回TRUE)
> x<-c(1,3,5,45,21)
> x>10
[1] FALSE FALSE FALSE TRUE TRUE
> x[x>10]
[1] 45 21
7、数组与矩阵
数组是一个k(大于等于1)维的数据表,矩阵是数组的特例,其维数k=2
(1)数组的建立
array(data,dim,dimnames)
由array()函数建立,data为向量;dim为数组维数向量(数值型);dimnames为由各维名称构成的向量(字符型),缺省为空
eg:
> a<-array(1:4,dim=c(1,2,2))
> a
, , 1
[,1] [,2]
[1,] 1 2
, , 2
[,1] [,2]
[1,] 3 4
> dim(a)
[1] 1 2 2
> dimnames(a)<-list(c("行1"),c("列1","列2"),c("数组1","数组2"))
> a
, , 数组1
列1 列2
行1 1 2
, , 数组2
列1 列2
行1 3 4
(2)矩阵的建立
也可用array()
建立,但更常用matrix(),对角矩阵则用diag()
更方便
- R中矩阵元素默认按列排
eg:
> A<-array(1:6,c(2,3))
> A
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> B<-matrix(1,nr=2,nc=2) #元素为1,2行,2列
> B
[,1] [,2]
[1,] 1 1
[2,] 1 1
> C<-diag(3)
> C
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
指定行名,列名:
rownames(x)<-c(“a”,“b”)
colnames(x)<-c(“c”,“d”)
指定矩阵数据项填充方向:
由参数byrow指定,缺省为按列填充(byrow=FALSE)
eg:
> x<-matrix(1:6,2,3)
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> x<-matrix(1:6,2,3,byrow = TRUE)
> x
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
(3)数组与矩阵的下标和子集(元素)的提取
> x<-matrix(1:6,2,3)
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> x[2,2]#提取位于第二行第二列的元素
[1] 4
> x[,2] #提取第二列的元素
[1] 3 4
> x[,2,drop=FALSE] #避免数据库转换成因子
[,1]
[1,] 3
[2,] 4
> x[-1,] #去掉第一行
[1] 2 4 6
> x[,3]<-NA #添加与替换元素
> x
[,1] [,2] [,3]
[1,] 1 3 NA
[2,] 2 4 NA
> x[is.na(x)<-1] #缺失值用1代替
[1] 1
> x[is.na(x)]<-1 #缺失值用1代替
> x
[,1] [,2] [,3]
[1,] 1 3 1
[2,] 2 4 1
(4)矩阵的运算函数
- 代数运算
①转置函数t():(行列转换)
②提取对角元diag():提取矩阵对角线上(一条)的元素
③两矩阵按行合并rbind()和按列合并cbind()
rbind(矩阵1,矩阵2) #按行合并,即矩阵2以行增加在在矩阵1下面
⑤逐元乘积“ * ” :两矩阵相对应位置上乘积,矩阵行列数需相同
- 统计运算
①对对象施加某种运算的函数:apply()
>apply(x,MARGIN,FUN)
x:矩阵 MARGIN=1按列计算,=2按行运算 FUN:+-*\等运算符
②sweep()函数
③scale()函数
8、数据框
与矩阵和二维数组形式类似,不同的是其行列意义。列表示变量,行表示观测值
(1)数据框的建立
①建立一些向量并用他们生成数据框
> x=c(42,7,64,9)
> y=1:4
> z=data.frame(INDEX=y,VALUE=x)
> z
INDEX VALUE
1 1 42
2 2 7
3 3 64
4 4 9
- 数据框中向量必须有相同长度或有倍数关系(按"循环"整数次)
②间接建立:通过函数read.table()读取数据文件(文本文件、Excel等)的观测值来建立
>zsq<-read.table(file="D:\桌面\zsq.txt",header=T)
>zsq
Treat weight
1 A 4.5
2 B NA
3 C 6.8
# header=T的含义是表示第一行为标题行,默认是F
(2)数据框适用函数
(3)数据框的下标和子集(元素)的提取
- 与矩阵基本相同,不同的是数据框列可以使用变量的名称
#1、提取单个元素
>Puromycin[1,1] #提取位于第一行第一列的元素
[1]0.02
#2提取一个子集
>Puromycin[c(1,3,5),c(1,3)] #提取位于第1、3、5行,第1、3列的元素
>Puromycin[c(1,3,5),c("conc","state")] #提取位于第1、3、5行,变量名为conc、state的元素
#3提取一列
>Puromycin$conc 等价于Puromycin[,1]
#4提取满足条件的子集
>subset(Puromycin,state=="treated"&rate>160)
(4)数据框添加新变量
- 三种方法
以在Puromycin中增加变量icon为例,其定义为1/conc
①基本方法:
>Puromycin$iconc<-1/Puromycin$conc
②with()函数
>Puromycin$icons<-with(Puromycin,1/conc)
③transform()函数,且可一次性定义多个变量
>Puromycin<-transform(Puromycin,icon=1/conc,sqrtconc=sqrt(conc))
9、时间序列
10、列表
- 包含任何类型的对象
用函数==list()==创建,其创建方法,默认没有对象名称,下标和子集提取等和数据框一样
> L=list(1:6) #一个对象的列表
> L
[[1]]
[1] 1 2 3 4 5 6
> L=list(1:6,"列表数据2",matrix(1:4,nrow=2)) #三个对象的列表
> L
[[1]]
[1] 1 2 3 4 5 6
[[2]]
[1] "列表数据2"
[[3]]
[,1] [,2]
[1,] 1 3
[2,] 2 4
> L=list(x=1:6,x2="列表数据2",y=matrix(1:4,nrow=2)) #给对象添加了名称的列表数据
> L
$x
[1] 1 2 3 4 5 6
$x2
[1] "列表数据2"
$y
[,1] [,2]
[1,] 1 3
[2,] 2 4