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

“ 对于向量来说,除了对它进行创建和增删改查操作,我们还有很多魔法一样的操作来处理向量。”

首先给出上一篇文章末尾练习的答案,

# 创建5元素向量三个 一个数值型 一个字符串型 一个布尔型
Numv <- c(2,6,7,1,9)
Strv <- c('bb','gg','mm','lala',"pp")
Tfv <- c(T,F,F,T,F)
# 使用布尔向量对数值向量进行索引
> Numv[Tfv]
[1] 2 1
# 自己构建索引查找字符向量的1 3 5位置的元素
> Strv[c(1,3,5)]
[1] "bb" "mm" "pp"
# 合并字符向量和数值向量 名为mer1
mer1 <- c(Strv,Numv)
# 删除mer1向量的第一个元素
mer1 <- mer1[-1]
# 在mer1末尾插入元素lalala
mer1 <- c(mer1,'lalala') # fun1
mer1[length(mer1)+1] <- 'lalala' # fun2
# 删除所有的元素
rm(list = ls())

上节课里,我们学习到了R语言里最基本的变量 - 向量,然后学习到了如何创建一个向量,以及如何对一个向量进行增加元素,删除元素,修改元素和索引元素。但是我们创建向量是要用来使用的,所以我们怎么来进行使用呢?那当然是进行各种运算操作来使用了。

基本运算

计算机的创建之初就是为了计算而生的,而我们日常使用的各种功能在底层,其实都是各种运算,不过大部分都是逻辑的运算,我们不需要去了解。

而今天我们要讲的运算就是各种复杂运算的原子元素,即最简单的四则运算,以及余数,取整操作,其中取整操作又包含了多种情况,后面我们会细致的讨论。

首先是最简单的四则运算

# 创建两组向量
a <- c(6,3,2)
b <- c(4,2,1)
# 加减乘除
a+b
a-b
a*b
a/b

image.png

结果清晰可见,而且大家有没有发现,R的操作是向量化的,也就是R让两组向量对应位置进行计算,不需要我们写一个循环去进行操作,大大节省了我们编程的时间,提高了代码的可读性。

在讲完了四则运算以后,我们讲解一下使用超级多的取余数操作,这应该是编程中使用非常大量的操作了

# 取余数
a %% b
[1] 2 1 0

R中的取余数操作符是 %% 符号,大家一定要记住,取余操作非常有用,很多编程的思路和算法的实现里大部分都有余数操作的身影,后面写的多了,自然也就知道了。

接下来就是取整操作,这在科学计算中是非常重要的操作,我们常常需要进行小数的取整方便使用或者因为某些特殊原因需要对其进行取整。

在R里,取整包括三个重要操作,一个是四舍五入取整,一个是向上取整,一个是向下取整。

第一个是四舍五入的取整 - round()

# 四舍五入
# 首先创建一个包含了浮点数的向量
> c <- c(1.345,2.456,3.567)
# 直接使用round会默认取到整数位置,也就是所谓的四舍五入
> round(c)
[1] 1 2 4
# 第二个参数是保留小数的位数 这是保留两位
> round(c,2)
[1] 1.34 2.46 3.57
# 保留一位小数
> round(c,1)
[1] 1.3 2.5 3.6

然后是向上取整和向下取整 floor和ceiling

# 向上取整
> floor(c)
[1] 1 2 3
# 向下取整
> ceiling(c)
[1] 2 3 4

这就是R里的基本运算,后面还会单独的讲解数学运算(均值,方差,最值,分位数,.。。)等等的函数,因为篇幅限制,此处就暂时不做讲解。

循环补齐

这一部分要讲一个有趣的概念,这是你学习其他语言学不到的一个东西,我们称它为 - 循环补齐,如果你有np pd 或者 torch的使用经验的话,你应该听说过有一个叫做广播机制的东西。R中的循环补齐大约就是这个意思,这个一个非常灵活而又有用的向量化的操作方式。

那么什么叫做循环补齐呢,大家可能还记得,我们过去定义的向量都是等长的,我故意没有举出不等长的向量进行 索引,运算 操作会发生什么。而这个时候就是循环补齐出场的时候了,直接上例子说明大家可能就懂了。

使用循环补齐让a的每个位置值都加一

> a + 1
[1] 7 4 3

这种操作你看起来好像没什么问题,但是在计算机的世界里,这太荒唐了,让一个长度为3的向量和长度为1的向量相加,这不是在开玩笑吗?

但是R会进行循环补齐。过程如下,首先发现1长度为1,a长度为3,然后R会主动通过循环把1补充成c(1,1,1)的形式,然后进行相加,得到 7 4 3。

那么,如我们让a + c(1,2)会发生什么呢?

a + c(1,2)
# R会把1 2 循环补齐变成 1 2 1然后相加
[1] 7 5 3

再考虑一种情况,如果a加上一个比自己长的向量呢?

> a + c(1,2,3,4)
# R会把短的向量循环补齐到和长向量相同的长度 然后进行运算
[1]  7  5  5 10

到这里为止,大家应该已经知道了循环补齐的概念了,下面再给出几个案例进行深入的理解

# 寻循环补齐进行值的索引
d <- c(1,2,3,4,5,6,7,8,9)
> d[c(T,F)]
[1] 1 3 5 7 9

是不是很神奇,R给我们自动的取出了所有奇数位置的元素,然后做成了一个新的向量。

那我们怎么取出偶数位置的向量呢?

d[c(F,T)]
[1] 2 4 6 8

好了,相信大家到这里对循环补齐已经有了比较深入的了解了,后面我们会经常遇到关于循环补齐的应用的,而且我们经常不知不觉的就使用到了这个特性。如果你的未来因为循环补齐的事情导致代码出了bug,相信你也知道应该怎么解决了。

放一点简单的小练习,

# 创建两组长为3的数值型向量 一组都是整数 一组都是四位小数
# 计算向量之间的加法并且保存结果到向量3
# 对小数向量向上取整 
# 对小数向量四舍五入保留两位小数
# 创建1-20的向量d
d <- 1:20
# 在d中取出 3 6 9 .。。
# 取出d中的5的倍数
# 对d中的奇数位置乘2,偶数位置乘3

今天的分享就到这里了,下一次的分享将是如何使用一些特定的运算符或者函数来为我们生成我们想要的向量以及如何获取一个向量的长度。

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

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

推荐阅读更多精彩内容