1.下载与安装
下载:官方网站
安装:双击下一步完成安装。
安装后只有8个基本的模块,一些功能需要安装扩展程序包(简称扩展包)。
R语言扩展包的三种安装方式:
- 菜单方式:R语言工具栏【Packages】->【Load package】,从已有的程序包中选定一个需要的进行加载;
- 命令方式:用函数install.packages(),如:在控制台中输入install.packages("lmtest")。
- 本地安装:在官方网站下载所需要的扩展包,在R语言工具栏中【Packages】->【Install package from local zip files...】
扩展包安装后只能载入内存才能使用,载入内存的方式有以下几种:
1.菜单方式:R语言工具栏【Packages】->【Load package】,从已有的程序包中选定一个需要的进行加载;
2.library()进行加载:如library(lmtest)
2.数据录入
- 可以以向量,矩阵,列表和数据框等形式输入数据;
- 一般在其他软件中录入数据,然后将数据读入到R语言中,常用Excel;
- xlsx转换到csv文件
- rc=read.csv("xxx.csv")
- read.csv命令只是将数据以数据框的形式读到R语言,第一行作为变量名
- 要直接调用变量,使用attach(rc)
3.R语言的运算
| 运算 | 符号 | 说明 | 例子 |
|---|---|---|---|
| 四则运算 | +,-,*,/,^ | 优先级与数学法则相同 | 6+5*3^2,结果51 |
| 赋值运算 | <-,=,-> | 根据个人喜好而定 | x=9 |
| 函数运算 | functionname() | sqrt(16);abs(-6); | -- |
| 关系运算 | <,<=,==,>,>=,!= | 结果TRUE或FALSE | -- |
| 逻辑运算 | &,|,! | -- | -- |
R语言需要注意的点:
- 区分大小写
- 变量名称第一个为字母,应包括字母,数字,下划线和点
- 代码之间可用“;”分割,或起新行
- 注释以“#”开头
- 只认识半角符号,全角不识别
4.R常用数据结构
4.1向量
- 向量的生成
- 一般向量的生成:
x=c(8.2,3.7,4.5,5.6,7.3),
用c()函数完成向量的合并:c(x,0,1,3)- 生成步长为1的向量,
用“:”符号,如1:5,5:1- 生成等差向量:
seq(from=value1, to=value2, by=value3)
seq(-2, 2, 0.5)
生成重复向量
rep(x, times=n)
x=1:3
rep(2,3);rep(x,3)产生空向量
x<-NULL
- 向量的运算
+,-,*,/,^对应加,减乘除和乘方运算,是对向量的每一个元素进行相应的运算:
x=c(1,3,5);y=c(2,4,6)
x+y;x-y;x*y;x/y;x^2
内积用x%*%y表示;
- 向量的元素和子向量的提取
x[i],i为具体数字,从1到N排序;
x[v], v可以是c()生成的向量;
x[-i], i为具体数字,此为去掉第i个元素后的向量;
- 与向量有关的函数
| 函数名 | 功能 |
|---|---|
| length | 计算向量的长度 |
| min | 向量中最小的元素 |
| max | 向量中最大的元素 |
| sum | 向量各元素之和 |
| prod | 向量各元素的连乘积 |
例如:
x=c(1,5,7,3)
length(x);min(x);max(x);sum(x);prod(x)
4
1
7
16
105
4.2矩阵
- 矩阵的生成
有很多方法,这里只介绍matrix()函数,格式如下:
matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)
- data为向量数据
- nrow是矩阵行数
- ncol是矩阵列数
- byrow=TRUE,生成矩阵按照行放置,FALSE按列放置;
- dimnames设置矩阵行列名称的参数,缺省时不设置
A=matirx(1:20,nrow=4,ncol=5)
B=matrix(1:20,nrow=4,ncol=5,byrow=T)
A;B
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
[3,] 11 12 13 14 15
[4,] 16 17 18 19 20
- 矩阵的运算
- 矩阵的四则运算
A=matrix(1:9,nrow=3,byrow=T)
B=matrix(2:10,nrow=3,byrow=T)
A;B;A+B;A-B;A*B;A/B
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[,1] [,2] [,3]
[1,] 2 3 4
[2,] 5 6 7
[3,] 8 9 10
[,1] [,2] [,3]
[1,] 3 5 7
[2,] 9 11 13
[3,] 15 17 19
[,1] [,2] [,3]
[1,] -1 -1 -1
[2,] -1 -1 -1
[3,] -1 -1 -1
[,1] [,2] [,3]
[1,] 2 6 12
[2,] 20 30 42
[3,] 56 72 90
[,1] [,2] [,3]
[1,] 0.500 0.6666667 0.7500000
[2,] 0.800 0.8333333 0.8571429
[3,] 0.875 0.8888889 0.9000000
- 矩阵的数乘运算和乘法运算
A=matrix(1:12,nrow=3,byrow=T)
B=matrix(12:1,nrow=4,byrow=T)
A;B;2*A;A%*%B
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
[,1] [,2] [,3]
[1,] 12 11 10
[2,] 9 8 7
[3,] 6 5 4
[4,] 3 2 1
[,1] [,2] [,3] [,4]
[1,] 2 4 6 8
[2,] 10 12 14 16
[3,] 18 20 22 24
[,1] [,2] [,3]
[1,] 60 50 40
[2,] 180 154 128
[3,] 300 258 216
- 矩阵的元素,行列向量及子矩阵的提取
A[u,v],u为行数或向量,v为列数或向量,u或v省略时,提取所有的行与列。
例如:
A=matrix(1:12,nrow=3,byrow=T)
A;A[3,2];A[1,];A[2,];A[1:3,3:4];A[c(1,3),c(3,2)]
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
[1] 10
[1] 1 2 3 4
[,1] [,2]
[1,] 3 4
[2,] 7 8
[3,] 11 12
[,1] [,2]
[1,] 3 2
[2,] 11 10
- 与矩阵有关的常用函数
| 函数名 | 功能 |
|---|---|
| t | 求矩阵的转置 |
| det | 求方阵的行列式 |
| diag | 对象为向量,生成对角矩阵;对象为矩阵,则返回对角线 |
| solve | A为方阵,b为向量,solve(A)计算逆,solve(A,b)解线性方程组AX=b |
| cbind | 按列合并A,B矩阵 |
| rbind | 按行合并A,B矩阵 |
| apply | apply(A,MARGIN,FUN,...),A是矩阵,MARGIN=1对行计算,2为列,FUN是用来计算的函数; |
A=matrix(c(1:8,10),nrow=3,byrow=T);
b=c(2,5,10)
A;t(A);det(A);diag(A);diag(b);solve(A);solve(A,b);apply(A,1,sum)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 10
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 10
[1] -3
[1] 1 5 10
[,1] [,2] [,3]
[1,] 2 0 0
[2,] 0 5 0
[3,] 0 0 10
[,1] [,2] [,3]
[1,] -0.6666667 -1.333333 1
[2,] -0.6666667 3.666667 -2
[3,] 1.0000000 -2.000000 1
[1] 2 -3 2
[1] 6 15 25
- 存储向量的矩阵
> m<-matrix(list(),2,2)
> m[1,1][[1]]<-1:2
> m[1,2][[1]]<-1:3
> m[2,1][[1]]<-1:4
> m[2,2][[1]]<-1:5
> m[1,2]
[[1]]
[1] 1 2 3
> m[1,2][[1]]
[1] 1 2 3
> m
[,1] [,2]
[1,] Integer,2 Integer,3
[2,] Integer,4 Integer,5
4.3列表
列表相当于Python中的哈希数组
- 列表的定义
list(name="James",height=2.03,no.children=2,child.ages=c(11,8))
$name
[1] "James"
$height
[1] 2.03
$no.children
[1] 2
$child.ages
[1] 11 8
- 列表的元素与子列表的提取
L=list(name="James",height=2.03,no.children=2,child.ages=c(11,8))
L[[1]];L[[4]];L$height
[1] "James"
[1] 11 8
[1] 2.03
- 存储向量的列表
> my_list<-list()
> my_list[[1]]<-c(1:5)
> my_list[[2]]<-c(6:11)
> my_list
[[1]]
[1] 1 2 3 4 5
[[2]]
[1] 6 7 8 9 10 11
4.4数据框
数据框是R语言的一种数据结构,通常为矩阵形式,但矩阵各列可以是不同类型;每列是一个变量,每行都是某个具体对象在各个变量上的一组观测值。
- 数据框的生成
调用data.frame(),如下:
sjk=data.frame(Name=c("zhang hua","wang li","Du juan"),class=c("t1",'t2','t3'),score=c(80,60,90))
> sjk
Name class score
1 zhang hua t1 80
2 wang li t2 60
3 Du juan t3 90
- 数据框的元素与子数据框的提取
- 采用类似矩阵元素与子矩阵提取方式;
- 数据框名$元素名
> sjk[2:3,c(1,3)];sjk$score
Name score
2 wang li 60
3 Du juan 90
[1] 80 60 90
- 数据框变量的调用和attach()函数
如果感觉用“数据框$元素名”麻烦,可用attach将元素名直接调入内存;
> attach(sjk);score
[1] 80 60 90
取消变量的连接可用detach()函数。
- dataframe删除行列
a<-data.frame(x=c(2,5,9,4,8,7),y=c(3,4,6,4,1,2))
> a
x y
1 2 3
2 5 4
3 9 6
4 4 4
5 8 1
6 7 2
> a[-1,]
x y
2 5 4
3 9 6
4 4 4
5 8 1
6 7 2
> a[,-1]
[1] 3 4 6 4 1 2
4.5因子
R语言中一类特殊的对象,主要目的为了表达与说明定性变量的取值。
生成因子最基本的函数是factor(),如:
> sex=c("M","F","M","M","F")
> sexf=factor(sex);
> sexf
[1] M F M M F
Levels: F M
产生一些规律的因子,还经常使用gl()函数,函数格式为:
gl(n,k,length=n*k,labels=1:n,ordered=FALSE)
n:水平数
k:重复次数
length:结果的长度;
labels:是一个n维向量,表示因子水平;
ordered:是逻辑变量,表示是否为有序因子,缺省值为FALSE。
> gl(3,5)
[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
Levels: 1 2 3
> gl(3,1,15)
[1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
Levels: 1 2 3
5 R程序设计
5.1条件语句
- if else
if(cond) {state}
if(cond1) {state1} else if(cond2) {state2} else {state3}
> if(x>1) {y=x^2+1} else {y=2*x}
> x
[1] 2
> y
[1] 5
5.2循环语句
- for
for(name in expr_1) {expr_2}
name是循环变量,expr_1是个向量,通常为序列,如1:20等;
expr_2为一组表达式
> A=matrix(0,nrow=3,ncol=3)
> for(i in 1:3) { for(j in 1:3) {A[i,j]=1/(i+j)}};
> A
[,1] [,2] [,3]
[1,] 0.5000000 0.3333333 0.2500000
[2,] 0.3333333 0.2500000 0.2000000
[3,] 0.2500000 0.2000000 0.1666667
- while
while(cond) {expr}
> year=0;a=10000
> while(a<20000) {a=a*(1+11.25/100); year=year+1};
> year;a
[1] 7
[1] 21091.14
5.3函数
函数定义
name=function(arg1,argt2,...) {expr}
expr为一组R语言表达式
> f=function(x){
+ if(x>1) {
+ y=x^2+1}
+ else {
+ y=2*x}
+ y
+ }
> f(0);f(1);f(2)
[1] 0
[1] 2
[1] 5
- 和verilog一样,参数按顺序传,如不按顺序,则“name=object"方式传参;
- 参数可以设置为默认值;