R(11):第二章:2.10 第二章总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/genome_denovo/article/details/82596917

《统计建模与R软件》薛毅

第2章 R软件的使用

总结

2.1 R软件简介

2.1.1 R软件的下载与安装

Mac电脑上的R软件的安装:
R的下载地址:https://cran.r-project.org/
进入之后点击:Download R for (Mac) OS X
选择Lastest release中的R-3.5.1.pkg,下载后直接安装即可。

2.2 数字、字符与向量

2.2.1 向量

1. 向量的赋值

“<-”表示赋值,“c()”表示数组,“X1<-c()”表示将一组数组赋值给变量X1
> X1 <- c(10.4, 5.6, 3.1, 6.4, 21.7)

2. 向量的运算

向量的加(+)减(-)乘(*)除(/)和乘方(^)运算(%/%)整数除法(%%)取余数,是对向量的每一个元素进行运算,包括向量与向量之间的运算,向量与数的运算。
> x <- c(-1, 0, 2); y <- c(3, 8, 2)
> v <- 2*x+y+1; v #表示x向量的各个分量都乘以2,再加上y的各个分量,相加时是对应位置的分量进行相加,同时各个分量都加1;
[1] 2 9 7
注意:两个向量长度不相同,除了对应位置的分量相加外,短的向量的分量还要进行多次运算。
exp(1)自然常数,exp(3)自然常数e的3次幂,sqrt(c)平方根,abs(c)绝对值

3. 与向量运算有关的函数

min(x)向量x的最小分量的值
max(x)最大值
range(x)最小值到最大值的范围
which.min(),which.max()第几个分量求到最小值和最大值
分量表示是从1开始计数的
sum(x)和
prod(x)连乘积值
length(x)x分量的个数
median(x)表中位数,
mean(x)均值,即sum(x)/length(x)
var(x)方差,即var(x)=sum((x-mean(x))^2)/(lenght(x)-1)
sd(x)标准差,即sd(x)=sqrt(var(x))
sort(x)从小到大排序

2.2.2 产生有规律的序列

1. 等差数列

a:b表示从a开始,逐项加1(或减1),知道b为止,如x<-1:30表示向量x=(1, 2, …, 30),x<-30:1表示向量x=(30, 39, …, 1)
等差运算优于普通计算运算

2. 等间隔函数

seq()产生等距间隔数列,seq(from=value1, to=value2, by=value3) 即从value1开始,到value2结束,中间的间隔为value3

3. 重复函数

> s <- rep(x, times=3) #将向量x重复3次放入s中

2.2.3 逻辑向量

当逻辑运算为真时,返回值为TRUE (T);否则为FALSE (F)。
逻辑运算符:比较
<小于, <=小于等于, >大于, >=大于等于, ==等于, !=不等于。
如果c1和c2是两个逻辑表达式:与或非
c1 & c2(c1与c2), c1 | c2(c1或c2), !c1(非c1)
all都为真,any至少一个为真

2.2.4 缺失数据

用NA表示某处的数据缺失,
is.na()是否是缺失数据,T为是,F为否
is.nan()是否不是缺失数据,T否,F为是
is.finite()是否有限,TRUE为有限,FALSE为无穷
is.infinite()是否无穷,TRUE为无穷,FALSE为有限
都是对向量中的数据而言的

2.2.5 字符型向量

> y <- c("er","sdf","eir",'jk','dim') #向量元素为字符串,单引号双引号意义相同
paste函数将自变量连接成一个字符串,默认用空格分开
> labs <- paste('X', 1:6, sep=''); labs #sep=”表示使用分隔符
[1] "X1" "X2" "X3" "X4" "X5" "X6"
> paste(c('a','b'), collapse='.') #collapse表示输出的a,b用“.”进行连接
[1] "a.b"

2.2.7 向量下标运算 R语言中向量的下标是从1开始的

向量中的某一个元素可用x[i]的格式进行访问,i表示该元素在向量中的位置下标,通过赋值形式可单独改变其值。
通过逻辑向量可取出想要的值
> x <- c(1,4,7)
> x[x<5] #逻辑判断取出x向量中分量小于5的值
[1] 1 4
> (y+1)[(!is.na(y)) & y>0] -> x # y+1表示y向量的各个分量加1,(!is.na(y)),y向量内取非NA值,&,同时,y>0取y内大于0的数
numeric()产生数值型向量
> y <- numeric(length(x)); y
[1] 0 0 0 0 0
> v <- 10:20
> v[c(1,3,5,7)] #通过向量下标的正整数运算可进行正向取值
[1] 10 12 14 16
> v[-(1:5)]
[1] 15 16 17 18 19 20
这里表示扣除相应的分量之后显示剩下的分量,v[-1]表示扣除v中的第一个分量,这里与python有所不同的是,python的负数取分量是逆向切片取值,所以不要混淆
定义向量时可以给元素加上名字
> ages <- c(Li=33, Zhang=29, Liu=18)
> ages['Zhang']
names函数可在定义向量后加入名字

2.3 对象和它的模式与属性

R对象都有两个基本的属性:mode(类型)属性和length(长度)属性。比如向量的类型为logical(逻辑型)、numeric(数值型)、complex(复数型)、character(字符型
判断类型:加is,例如is.logical();定义类型:加as,例如as.character()
重新赋值可改变对象长度
attributes()返回属性,attr()新增属性
class查看对象的属性分类

2.4 因子

离散型变量用因子来表示这种类型的变量
> sex <- c("M", "F", "M", "M", "F")
> sexf <- factor(sex); sexf
[1] M F M M F
Levels: F M
tapply()可对不同向量进行归类并总结
> sex <- c("M", "F", "M", "M", "F")
> height <- c(174, 165, 180, 171, 160)
> tapply(height, sex, mean) #height是向量X,sex是与X有相同长度的因子INDEX,mean时FUN计算函数。或
sexf <- factor(sex); tapply(height, sexf, mean)
F M
162.5 175.0
gl()函数产生有规律长度的向量因子

2.5 多维数组和矩阵

注意重点内容:矩阵的元素是按照列存放的,即先存列,再存行

用array()函数构造多维数组
> X <- array(1:20, dim=c(4,5)) #生成一个4行5列的数组
> X
[,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
用matrix()函数构造矩阵
> A <- matrix(1:15, nrow=3, ncol=5, byrow=TRUE) #等价
> A <- matrix(1:15, nrow=3, byrow=TRUE)
> A <- matrix(1:15, ncol=5, byrow=TRUE)
数组下标
数组下标取值可对数组进行降维,可通过单个数字取值或范围取值,例如:
> z <- matrix(1:15, nrow=3, byrow=T); z
····[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
[3,] 11 12 13 14 15
> z[1,]
[1] 1 2 3 4 5
> z[1,2]
[1] 2

数组的四则运算(+, -, *, /)实际上是对相应元素的运算,数与数组的运算对应的是每个元素的运算,数组与数组的运算是数组相应位置的运算,且两个数组的行列相同。
矩阵的运算
t() 矩阵转置
det() 求行列式
x %*% y 内积
x %o% y 外积
diag(v)(v是向量)生成对角线矩阵
dim() 矩阵维数
矩阵合并(cbind(x,y)横向合并,x和y行数相同,rbind(x,y)纵向合并,x和y列数相同)
矩阵拉直即将矩阵转化为向量as.vector(A)
apply() 应用矩阵运算
> A <- matrix(1:6, nrow=2); A
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> apply(A, 1, sum) #一维,即1+3+5=9,2+4+6=12
[1] 9 12

2.6 列表与数据框

列表:list()
> Lst <- list(name='Fred', wife='Mary', no.children=3, child.ages=c(4,7,9))
列表元素访问,“列表名[[下标]]”或“列表名$元素名”,列表修改可直接赋值
数据框:data.frame()
> df <- data.frame(Name=c('Alice','James','Becka','Jeffrey', 'John'), sex=c('F','F','M','M','M'), Age=c(13,13,12,13,12), Height=c(56.5,65.3,57.3,62.5,59.0),Weight=c(84.0,98.0,83.0,84.0,99.5));df
as.data.frame(Lst)将列表转为数据框
数据框的元素访问和列表相同,元素范围取值和数组矩阵相同

2.7 读、写数据文件

读文件:read.table()函数
read.table(file, header = FALSE, sep = “”),是常用参数,header默认文件有表头,sep文本文件的分隔符
读取其他格式文件:
SPSS数据文件(”educ_scores.sav”)
SAS数据文件(”educ_scores.xpt”)
S-PLUS数据文件(”educ_scores”)
Stata数据文件(”educ_scores.dta”)
仍然可以用read.table()这个函数
读Excel数据文件,需要将Excel表格中的文件写到txt文档中,用制表符分隔
写文件:write.table()函数和write.csv()函数
write.table()写到文本文件,write.csv()写到csv格式文件

2.8 控制流

1,if / else 语句的格式为:
if(cond) statement_1
if(cond) statement_1 else statement_2
如果cond成立执行statement_1,否则执行statement_2
2,switch(statement, list)
其中statement是表达式,list是列表,可以用有名定义。如果表达式的返回值在1到length(list),则返回列表相应位置的值,否则返回NULL值;
3,break语句的作用是中止循环,使程序跳出循环外。next语句是继续执行,而不执行某个实质性的内容。
4,for循环的格式为:
for (name in expr_1) expr_2
其中name是循环变量,expr_1是一个向量表达式(通常是个序列,如1:20),expr_2通常是一组表达式。
5,while循环语句的格式为:
while (condition) expr
若条件condition成立,则执行表达式expr
6,repeat语句
repeat {f[i+2]<-f[i]+f[i+1]; i<-I+1; if (f[i]+f[i+1]>=1000) break}
repeat循环依赖break语句跳出循环

2.9 编写自己的函数

定义函数,格式为name <- function(arg_1, arg_2, …) expression,调用函数name(arg_1, arg_2, …);arg_1, arg_2, … 表示函数的参数;表达式中,放在程序最后的信息是函数的返回值

猜你喜欢

转载自blog.csdn.net/genome_denovo/article/details/82596917