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

上节课我们讲解了向量的基本运算和R语言中非常重要的概念,循环补齐机制,但是我们还不能很方便的创建特定样式的向量,今天就要解决这个问题

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

# 创建两组长为3的数值型向量 一组都是整数 一组都是四位小数
v1 <- c(3,6,9)
v2 <- c(1.4567,2.4365,3.7897)
# 计算向量之间的加法并且保存结果到向量3
v3 <- v1 + v2
# 对小数向量向上取整 
ceiling(v2)
# 对小数向量四舍五入保留两位小数
round(v2,2)
# 创建1-20的向量d
d <- 1:20
# 在d中取出 3 6 9 .。。
d[c(F,F,T)]
# 取出d中的5的倍数
d[c(F,F,F,F,T)]
# 对d中的奇数位置乘2,偶数位置乘3
d * c(2,3)

相信你一定已经学会了上一文章的内容,那么我们就开始今天的内容吧。

我们第一节的内容讲解了如何创建一个向量,但是我们是通过手打的方式,数量少的情况还好,如果数量非常多的话,那么对我们的身心都是一种折磨。

尤其是比较特殊的情况,比如 我想生成一个长度为20的内容都是6的向量,或者我想生成1到100的数值向量等等。我们总不能自己去一个一个的按,这种情况下,就需要我们今天的知识了。如何创建特殊的向量以及取向量的长度操作。

获取向量长度

取向量长度的操作非常的简单,但是它非常的重要,大部分的算法以及数据的自动处理流程中,都有着取向量长度的身影

取向量长度:length()

> d <- c(1,2,3,4,5)
> length(d)
[1] 5
> f <- c(T,F,F,T,T,T)
> length(f)
[1] 6

就是这么简单粗暴,直接返回一个标量值,是你向量的长度,就这样,没有其它花哨的,简约美,优雅美,而且还实用
image.gif

冒号运算符

讲完了使用length函数取向量的长度,我们再来讲个简单粗暴的好东西 -- :运算符。

这个运算符可以帮我们取等差数列,如果你使用过python的range的话,那么你会惊喜的发现这两个东西非常相似(实际是有区别的哦),都是给定范围,然后取等差数列。

下面给两个演示,大家一看就能明白,

# 生成1-6的序列
> v3 <- 1:6
> v3
[1] 1 2 3 4 5 6
# 生成8-0的序列
> 8:0
[1] 8 7 6 5 4 3 2 1 0

是不是已经理解了:运算符的作用呢,这个运算符常常用来配合循环和取数据特定长度或者位置的操作

下面给出两个示例
(取特定长的值和使用索引操作模拟rev函数)

# 随便生成一组向量
testv1 <- 1:20
# 现在取向量testv1的5-12位置的值
> testv1[5:12]
[1]  5  6  7  8  9 10 11 12

# 模拟rev函数
> testv1[20:1]
 [1] 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1

创建等差序列 - seq

上面我们讲解了使用冒号运算符生成序列,但是我们发现,冒号运算符好像不允许我们生成步长更大的序列,比如我们想要1 3 5 7 9或者1 11 21 31...等等的序列。

我们过去学过的循环补齐操作也是可以实现这个功能的,但是对于实现1 11 21.。已经是非常复杂的操作了,更别说实现100 200 300 .。。等等更大的数字的等差序列了。而且我们偶尔还有对于小数序列的需求,这连循环补齐都做不到了,我们该怎么办呢?

不要着急,这么重要的功能,R已经给我们内置好了,那就是使用我们的seq函数,轻松完成取等差序列的操作,不止整数,小数也能随便取哦!

**seq(...):Generate regular sequences. **

下面给出案例看一看,

# 生成1:10的步长为2的等差序列
> seq(1,10,2)
[1] 1 3 5 7 9
# 生成1-2的步长为0.2的等差序列
> seq(1,2,.2)
[1] 1.0 1.2 1.4 1.6 1.8 2.0
# 生成1-120步长为15的等差序列
> seq(1,120,15)
[1]   1  16  31  46  61  76  91 106

大家看懂上面的案例了吗,这就是使用seq函数进行取定步长的操作,这是非常有用的操作,大家也可以在各大函数库以及各种层次的代码中见到它的身影。

但是我们的seq函数能做到的可不止这个,它还有另一个很常用的功能,这就是它可以取两个值之间给定长度数目的向量。什么意思呢,好比你给了1和2,你要在这之间取5个数,seq就会自动给你计算,然后返回给你1 1.2 1.4.。。。2的向量。

# 取给定数量的向量
> seq(1,2,length.out = 2)
[1] 1 2
> seq(1,2,length.out = 4)
[1] 1.000000 1.333333 1.666667 2.000000
> seq(1,2,length.out = 5)
[1] 1.00 1.25 1.50 1.75 2.00

seq函数会自动给我们进行计算,所以对于我们想取特定长度的向量的时候就不需要自己计算步长了,比如我想要325到600之间取5个向量,我们完全不需要指定步长,直接使用length.out参数指定为5即可

> seq(325,600,length.out = 5)
[1] 325.00 393.75 462.50 531.25 600.00

上面就是关于seq函数的所有了,你学会了吗?

创建重复值向量 - rep

我们在提取数据或者生成索引或者进行编码的时候,常常会用到重复值,所以R也给我们提供了一个非常好用的重复值生成函数,rep函数,同样,它也是我们平时写代码必不可少的好伙伴。

rep(x, ...):rep replicates the values in x.

rep可以让我们很好的取得重复值,下面给出案例

rep的参数有必要讲一下,它的第一个参数是需要重复的向量,后面是具名参数,一个是each一个是length.out,each是重复次数,length.out默认是重复所有,如果你进行指定的话则只会输出Length.out的总长度。

# 取10个1
> rep(1,each = 10)
 [1] 1 1 1 1 1 1 1 1 1 1
 # 指定length.out进行阻断
 > rep(1,each  = 10,length.out = 2)
[1] 1 1

下面再给出几个案例,大家好好体会一下each和length.out

# 生成1 1 2 2 3 3
> rep(c(1,2,3),each = 2)
[1] 1 1 2 2 3 3
# 生成TTT FFF TT
> rep(c(T,F,T),each = 3,length.out = 8)
[1]  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE

我们上面的操作只让每个值都重复了两次,现在我们想让整体进行重复,我们目前的参数好像很难进行指定了,这就需要新的参数,times参数,指定整体的重复次数

# 生成 123 123 123
> rep(c(1,2,3),times = 3)
[1] 1 2 3 1 2 3 1 2 3
# 参数还可以一起进行指定 
> rep(c(1,2,3),times = 2,each = 3)
 [1] 1 1 1 2 2 2 3 3 3 1 1 1 2 2 2 3 3 3

最后,rep函数还有一组操作,就是使用向量来指定重复次数,

# 生成1 22 333
> rep(c(1,2,3),c(1,2,3))
[1] 1 2 2 3 3 3

(注意,使用了向量指定次数以后不可以再使用times和each)

上面就是今天的所有内容了,从取向量的长度开始,然后到如何生成等差序列,以及各种各样的生成重复值的方法。这些内容都是非常实用的知识,必须要认真的掌握,了解每个内容的使用方法,才能再后面的操作中更好的应用。

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

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

推荐阅读更多精彩内容