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

我在这一年断断续续看了几本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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335

推荐阅读更多精彩内容