R笔记之《R语言之书-编程与统计》第一部分 语言(1)

2019-06-05  本文已影响0人  我是Peace

我在这一年断断续续看了几本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

通过rbindcbind命令来合并行和列,例如:

> 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章内容,谢谢你来看我哇。

入门生信最快方式请搜索生信技能树

  1. 生信技能树全球公益巡讲
    https://mp.weixin.qq.com/s/E9ykuIbc-2Ja9HOY0bn_6g
  2. B站公益74小时生信工程师教学视频合辑https://mp.weixin.qq.com/s/IyFK7l_WBAiUgqQi8O7Hxw
  3. 招学徒
    https://mp.weixin.qq.com/s/KgbilzXnFjbKKunuw7NVfw
上一篇下一篇

猜你喜欢

热点阅读