R语言系列2 | 变量类型1-向量1

“ 如果说编程是盖一栋大楼,那么说,变量就是这栋大楼的各种建筑材料。想盖好大楼,我们就应该理解每种材料的特性以及使用方法。”

也许你过去接触过编程的理论,也许你没有,但是这都无关紧要,因为我会通过R的系列教程,让你的编程技能从无到有,可以处理日常的基本的矩阵文件或者表格文件,完成统计分析。

如果你过去接触过R语言,但是只限于使用别人的代码来运行,出错了就不知如何是好,那么这一系列教程将是你通向正确的光芒,指引你修改和优化别人的代码。

我将从编程的角度来讲解R语言的书写,而不是单纯的讲解如何掉包以及如何使用R来运行已有的代码。同样的,每篇文章结束以后都会有小小的练习,让你的R水平快速进步,直到能自己书写数据处理分析过程。

我的全流程是打算这样安排,首先是变量部分,大约花费10-15篇文章进行介绍,让你了解到R形形色色的变量类型以及如何使用他们,然后通过3-5节的内容进行讲解编程的控制流程,之后就是读取和写入数据1-2节,最后是函数编写,3-5节。

到这里为止,基础教程就讲完了,你就可以去看ggplot2的教程或者dplyr以及reshape2等教程了。然后后面打算出一点进阶的知识,关于R的高性能编程,内存管理,面向对象和异常捕获的知识,有兴趣的可以参考看看。

!!!目前位置是教程2 变量类型1 - 向量!!!

1 什么是向量

说起来什么叫向量,我们还是先说一下什么叫变量。变量,望文生义,它就是可变的量,你把值传给它,它就是多少,并且可以进行修改,所以就叫变量。跟变量相对的概念叫做常量,这里暂且不提,后面会有专门的教程进行讲解。

对于任何一门编程语言,变量都是最基本的构成,可以没有函数和类,但是一定会有变量,我个人对于变量的理解就是,变量是一种容器,装着你需要使用的东西。这句话后面你慢慢体会,就会理解了.

在R语言中,最最基础的一种容器就是向量了,你所见的高阶数据结构(矩阵 数据帧以及array等等),要么是向量的变体,要么是向量的组合而成。下面来介绍一下什么是向量。

向量,是由一组同一数据类型的元素所构成的一种一维结构,如果不传入同一类型数据,R会替你转化为同类型数据。

!!!!!在Rstudio中,按下ctrl+enter键可以单行执行代码!!!!!!

2 向量的创建

每一种数据类型都有它的创建方法,R的向量也不例外。作为一种动态语言,定义变量之前是不需要声明的,我们可以定义。并且R定义变量具有多种方式,在此为了不让大家迷惑,只使用最简单也是最常用的一种向量定义方式c()。

# 创建向量
v1 <- c(1,2,3,4)
v2 <- c('a','g',3)
v3 <- c(TRUE,FALSE,TRUE)
# 查看向量 直接输入向量名字即可
v1

上面的例子中我们定义了三组向量,他们分别是v1,v2,v3,其中v1内部存的都是数字,v2存了数字和向量,而v3存了所谓的布尔值,即T和F。

看到这里你不会产生疑问吗?我们刚刚说过向量只能是同一种数据类型,但是v2为什么有字符串和数值而且还不会报错呢?让我们使用class()函数打印一下类型看看。

> class(v2)
[1] "character"

我们可以看到,v2已经是一个字符串类型了,R给我们把元素类型从数值转化为了字符型,而我们未来使用它运算的时候还会转化回来。怎么样,R是不是很聪明呢?

3 向量的索引

这一部分我们要讲解关于向量的索引,上面的部分我们已经学会了如何创建一个向量了,但是我们需要使用其中的一个值或者多个值,我们该怎么办呢?

我们将从向量,矩阵或者数据框中取特定位置的值的操作称为索引,那么我们应该如何在向量中进行索引操作呢?在R中,我们有三种最常用的索引操作,我称他们分别是直接索引,布尔索引以及范围索引。

直接索引:在向量中,元素的位置是从1开始的,也就是说,我们可以使用位置取到每个元素的值,这就是直接索引。

> # 直接索引
> v1[3]
[1] 3
> v2[1]
[1] "a"
> v3[2]
[1] FALSE

我们可以看到,使用[]可以进行向量的索引操作,查找向量中的每一个元素,这种方法非常简单,大家尝试一下就懂了。

布尔索引:在R语言中,我们还可以使用一种非常特殊的索引方法,即使用布尔值进行索引,布尔值为T的位置被取到,布尔值为F的位置则被排除,案例如下

# 布尔值索引
> v1[c(T,F,T,F)]
[1] 1 3
> v2[c(F,F,F,T)]
[1] "ao"

我们可以看到T的位置被保留了,F的位置被删除了,然后返回了一个新的向量。我们还可以发现,我们的索引本身也是一个向量,所以我们可以把索引存在向量里,然后去取值。

# 把索引装进向量里
index_v <- c(T,F,T,F)
v1[index_v]
[1] 1 3

范围索引:第三种索引方式是使用范围进行索引,即我们可以在一个范围内去取向量的元素。

# 多值索引
v1[c(1,4)]
[1] 1 4
v2[c(2,3,4)]
[1] "g"  "3"  "ao"

上面是使用多个位置进行索引,下面讲解一下使用范围索引

# 范围索引
v1[1:3]
[1] 1 2 3
v2[2:4]
[1] "g"  "3"  "ao"
v3[1:4]
[1]  TRUE FALSE  TRUE FALSE

是不是非常简单呢?

4 向量的增删改

知道了如何对向量进行索引操作,那么进行增删改也就不再是什么问题了。首先是进行修改操作,

# 修改v1的第一个元素为999
v1[1]<-999
# 修改v1的3,4位置元素为888 666
v1[c(3,4)] <- c(888,666)
v1
[1] 999   2 888 666

这就是向量的修改操作了,只要你索引到了,然后传入对应长度的向量,就可以完成修改了。

下面讲解向量的增加操作,首先是比较简单的末尾增加

# 增加元素
v1[5] <- 7
v1[10] <- 11
v1

如果在向量末尾添加新元素则直接像修改操作一样即可,但是如果向量长度为5,在位置10添加元素,则会对6 7 8 9 位置填充缺失值NA,然后在10这个位置添加新元素。

下面是在向量的第一个位置进行添加元素,

# 头插入元素
v1 <- c(666,v1)
v1

这就是在头部添加元素的方法了。
使用上面的方法也可以合并多个向量到一个向量中,再此不进行演示,后面留作练习。

最后讲一下向量的删除操作,在R中,使用-index来进行删除

# 删除第一个元素
v1 <- v1[-1]
v1
# 删除最后一个元素
v1 <- v1[length(v1)]
v1
# 删除多个元素
v1 <- v1[c(-1,-2,-4)]
v1

上面的操作就是对向量中元素进行删除的操作了。

最后别忘了运行一下这句代码,后面会讲解

rm(list = ls())

最后,留一点小小的练习,练习的答案将会在下一期R系列推文中展示,

# 创建5元素向量三个 一个数值型 一个字符串型 一个布尔型
# 使用布尔向量对数值向量进行索引
# 自己构建索引查找字符向量的1 3 5位置的元素
# 合并字符向量和数值向量 名为mer1
# 删除mer1向量的第一个元素
# 在mer1末尾插入元素lalala
# 删除所有的元素
rm(list = ls())

下次内容更精彩哦,关注不迷路!

如果你喜欢我的文章,请收藏我的文章并且给我个赞,你的支持就是我更新的最大的动力,关注我会有更多惊喜哦,专注于生物信息学以及数据分析入门和进阶教程,也许我给不了你从10-100,但是我可以给你最好的从0-10!

最后,关注我的公众号,领取更多学习资料吧!!!

打开v搜索,”轻松玩转生信“或者从下面文章进去获取二维码关注哦

二维码传送门

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

推荐阅读更多精彩内容