我在这一年断断续续看了几本R语言的书,最近几天开始看jimmy给我的这本《R语言之书—编程与统计》,这本书的作者是新西兰的Tilman M.Davies,由国内的李毅教授翻译。看过这本书后,整体感觉这本书很适合初学者,讲的很系统和详细。推荐大家去看这本书,也照着书上的简单代码边跑边理解。
第一部分内容有8个章节
- 新手入门
- 数值、运算、赋值和向量
- 矩阵和数组
- 非数值型数据
- 列表和数据框
- 特殊值、类型和转换
- 基本绘图
- 读写文件
新手入门
在R官网下载不同系统的R语言,并安装。这个不再赘述,在学习R的路上不下载安装个5遍都不敢说我再学R,在错误中吸取教训吧。
数值、运算、赋值和向量
所有的普通算数运算和数学方程都可以在R中直接使用
例如 2+3 14/6+5
,也可以用函数计算,例如sqrt(x=9)
sqrt函数计算非负数的平方根。也可以使用对数和指数函数,例如log(x=243,base=3)
是计算以3为底的x=243的对数是5。也可以使用科学计数法,例如23421501012900
科学计数法结果是2.342151e+12
。
在R中的赋值用<-
或者=
号表示,例如x<-5
,将5赋值给x。
建立向量的函数是c()
,在R中区分大小写。例如myvec <-c(1,2,3)
。在R中常用的与向量相关的函数seq
,rep
,sort
,length
等。生成序列的简单方法是使用冒号:
,例如3:10
,输出为3,4,5,6,7,8,9,10
,是一个从3开始,到10结束,以1为间隔的序列。使用序列函数seq
,使用函数可以更灵活的生成序列,例如seq(from=3,to=10,by=2)
就是一个从3开始,到10为止,间隔为2的序列,其输出为3,5,7,9
,要注意的是最后一个数不是10,因为间隔数是2,产生的序列是以奇数为止。
使用重复函数rep
重复某个值,例如rep(x=1,times=3)
,即为1 1 1
,重复了3次1。
使用排序函数sort
,可以对向量的元素按照升序或者降序进行排列。例如sort(x=c(2.5,-1,-10,3.44),decreasing=FALSE)
,其输出为-10,-1,2.5,3.44
,即按照升序对元素进行排列。
使用长度函数length
,会给出向量x中有几个元素。例如 length(x=c(3,2,8,1)
,输出为4
,即x中有4个元素。
利用索引[]
提取向量中的元素,例如在myvec<-c(1,1,2,4)
中,myvec[3]
输出为2
,即在向量中的第3个元素为。
矩阵和数组
矩阵简单来说就是由几行几列组成的元素构成
在R中使用matrix命令来构建矩阵,将矩阵中的元素以向量形式赋值给参数data,例如:
> A <- matrix(data=c(-3,2,893,0.17),nrow=2,ncol=2)
> A
[,1] [,2]
[1,] -3 893.00
[2,] 2 0.17
data中的元素默认以列来填充矩阵,也可以用参数byrow
来控制填充数据的方式。例如:byrow=FALSE
以列填充,byrow=TRUE
以行填充
> matrix(data=c(1,2,3,4,5,6),nrow=2,ncol=3,byrow=FALSE)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> matrix(data=c(1,2,3,4,5,6),nrow=2,ncol=3,byrow=TRUE)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
通过rbind
和cbind
命令来合并行和列,例如:
> rbind(1:3,4:6)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
> cbind(c(1,4),c(2,5),c(3,6))
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
用dim
函数来确定矩阵的维度,例如:
> mymat <- rbind(c(1,3,4),5:3,c(100,20,90),11:13)
> mymat
[,1] [,2] [,3]
[1,] 1 3 4
[2,] 5 4 3
[3,] 100 20 90
[4,] 11 12 13
>
> dim(mymat)
[1] 4 3 # 4行3列
在矩阵中提取元素仍然使用中括号,按照顺序[行,列]来说明元素的行和列的位置。例如:
> A <- matrix(c(0.3,4.5,55.3,91,0.1,105.5,-4.2,8.2,27.9),nrow=3,ncol=3)
> A
[,1] [,2] [,3]
[1,] 0.3 91.0 -4.2
[2,] 4.5 0.1 8.2
[3,] 55.3 105.5 27.9 #先创建一个矩阵
> A[3,2]
[1] 105.5 #提取矩阵中第3行,第2列的元素
也可以按照行、列、对角线来提取元素,只需指定要提取的是第几行第几列,并将另一个维度设为空值,行列之间需要用逗号隔开,例如
> A[,2]
[1] 91.0 0.1 105.5 #提取第2列的元素
> A[1,]
[1] 0.3 91.0 -4.2 #提取第1行的元素
> A[2:3,]
[,1] [,2] [,3]
[1,] 4.5 0.1 8.2
[2,] 55.3 105.5 27.9 #提取第2行和第3行的元素,构成一个新的矩阵
> diag(x=A)
[1] 0.3 0.1 27.9 # diag命令提取对角线中的元素
在中括号中也可以使用负号索引来删除矩阵中的元素。例如:
> A[,-2]
[,1] [,2]
[1,] 0.3 -4.2
[2,] 4.5 8.2
[3,] 55.3 27.9 #删除第二列的元素
*数组用array函数来创建,例如:
> AR <- array(data=1:24,dim=c(3,4,2))
> AR
, , 1
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
, , 2
[,1] [,2] [,3] [,4]
[1,] 13 16 19 22
[2,] 14 17 20 23
[3,] 15 18 21 24 #以列方式填充,创建3行4列2层的数组
在中括号中输入相应维度即可提取数组中的元素
> AR[2,,2]
[1] 14 17 20 23 #提取2层,2行的元素
非数值型数据
逻辑值 TRUE、FALSE
,可以给对象赋予逻辑值
> foo <- TRUE
> foo
[1] TRUE
> bar <- F
> bar
[1] FALSE
同样,向量元素和矩阵都可以用逻辑值来表示。
使用关系运算符,比较数值之间的关系是否符合逻辑,例如:
> 1==2
[1] FALSE
> 1>2
[1] FALSE
> (2-1)<=2
[1] TRUE
> 1!=(2+3)
[1] TRUE
用any、all
这两个函数快速查看逻辑值,如果向量中至少有一个逻辑值是TRUE,any函数返回TRUE,否则是FALSE,如果向量中所有逻辑值是TRUE,all函数返回TRUE,否则是FALSE。
用逻辑运算符&、&&、|、||、!
进行多重比较,例如:
> FALSE||((T&&TRUE)||FALSE)
[1] TRUE
> !TRUE&&TRUE
[1] FALSE
> (T&&(TRUE||F))&&FALSE
[1] FALSE
> (6<4)||(3!=1)
[1] TRUE
字符串用双引号" "
表示,要创建字符串,只需要在一对引号内输入文本内容。例如:
> foo <- "This is a character string!"
> foo
[1] "This is a character string!"
> length(x=foo)
[1] 1 # foo是一个长度为1的向量
用cat、paste
这两个函数连接一个或多个字符串,例如:
> qux
[1] "awesome" "R" "is"
> cat(qux[2],qux[3],"totally",qux[1],"!")
R is totally awesome !
> paste(qux[2],qux[3],"totally",qux[1],"!")
[1] "R is totally awesome !
也用sep
函数分隔字符串,例如:
> paste(qux[2],qux[3],"totally",qux[1],"!",sep="---")
[1] "R---is---totally---awesome---!"
> paste(qux[2],qux[3],"totally",qux[1],"!",sep="")
[1] "Ristotallyawesome!"
> cat("Do you think ",qux[2]," ",qux[3]," ",qux[1],"?",sep="")
Do you think R is awesome? #sep="" 表示空格
用\
但反斜杠调用转义序列,转义序列用来控制格式和字符串的间距。\n (换行)、\t(水平制表)、\b(调用退格)、\\(反斜杠)、\''(双引号)
。例如:
> cat("here is a string\nsplit\tto neww\b\n\n\tlines")
here is a string
split to neww
lines
> cat("I really want a backslash: \\\nand and a double quote: \"")
I really want a backslash: \
and and a double quote: "
用subtr
函数提取字符串x中的字符,例如:
> foo <- "This is a character string!"
> substr(x=foo,start=21,stop=27)
[1] "string!" *start 、stop 两个参数,提取位置21到27之间的字符。
因子通常是由数字或字符向量来创建,不可以用因子填充矩阵或者多维数组,使用factor
函数来创建一个因子向量,用levels
函数来提取字符串向量的水平值。用cut
函数将连续数据中分为离散的因子。例如:
> sex.num <- c(0,0,0,1,0,1,1,0)
> sex.char <- c("female","female","female","male","female","male","male","female")
> sex.num.fac <- factor(x=sex.num) #创建sex.num.fac因子
> sex.num.fac
[1] 0 0 0 1 0 1 1 0
Levels: 0 1 #水平是 0 1
> sex.char.fac <- factor(x=sex.char)
> sex.char.fac
[1] female female female male female male male female
Levels: female male
> levels(x=sex.num.fac)
[1] "0" "1"
> levels(x=sex.char.fac)
[1] "female" "male"
以上为1-4章内容,谢谢你来看我哇。
入门生信最快方式请搜索生信技能树
- 生信技能树全球公益巡讲
https://mp.weixin.qq.com/s/E9ykuIbc-2Ja9HOY0bn_6g - B站公益74小时生信工程师教学视频合辑https://mp.weixin.qq.com/s/IyFK7l_WBAiUgqQi8O7Hxw
- 招学徒
https://mp.weixin.qq.com/s/KgbilzXnFjbKKunuw7NVfw
网友评论