“ 如果说编程是盖一栋大楼,那么说,变量就是这栋大楼的各种建筑材料。想盖好大楼,我们就应该理解每种材料的特性以及使用方法。”
也许你过去接触过编程的理论,也许你没有,但是这都无关紧要,因为我会通过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搜索,”轻松玩转生信“或者从下面文章进去获取二维码关注哦