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

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

作者: 我是Peace | 来源:发表于2019-06-05 20:38 被阅读0次

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/vgvsxctx.html