日常瞎掰
前面聊过了linux入门学习指南,今天来聊聊R语言。做为一个脚本型的高级语言,R常被用于数据处理、统计分析、数据可视化等方面。在生命科学领域的研究中也是随处可见R的身影,里面有很多现成的扩展包可用于各种组学数据的分析和展示。为什么R能够赢得科研人员的青睐呢?
这得益于R简单易用的特点:首先,R的语法相对简单,学习成本很低,极易上手,只需花费很少的学习时间就可满足日常工作的需求;再者,R无需复杂的编程过程,基于向量化特性和函数调用,少量的代码即可轻松完成任务;同时,R语言里面拥有较为完善的处理生命科学数据的生态系统。简单来说,用R语言分析数据可以节约科研人员的时间成本。这感觉就好像用office excel
一样,没有什么学习负担,能够有更多的时间专注于探索数据的意义。
日常分析中R的使用过程似乎没有什么编程思维可言,大都是借助现有的函数来解决问题,要么R自带的函数要么扩展包里的函数。接触R语言挺长时间了,做为一个使用者,感受最为强烈的就是解决问题时包治百病
,复杂一点的问题一个包不行那就多用几个 (调包侠不是在调用包就是在调用包的路上)。
这么易用且合适的工具,这谁能拒绝得了?那么,应该如何学习将其收入囊中呢?个人觉得首先得弄明白以下的几个方面。
数据结构
首先,要搞明白R里面的基础数据结构,这些是数据的载体,用来存储需要处理的数据,即使复杂的数据对象也是建立在这些基础的数据结构之上。所以,了解数据结构的相关属性和方法,有助于更好的处理数据。
上面以示意图的方式展示了R里面的基础数据结构,其中除了数组(array)其余都很常用,尤其向量(vector)、矩阵(matrix)、数据框(dataframe)。除创建数据外,想要处理数据还需要明白数据结构的一些基本操作如增、删、改、查等。虽然R里面有多个数据结构,但都是以向量为基础,get
到这一点,就可以把处理向量的那一套扩展到其他结构当中。当然,除了上面展示的数据结构外,R里面还有一个比较特殊的数据类型 - 因子(factor),该类型常用于离散型数据的分组。
向量化操作
R处理数据之所以方便,很大程度上得益于向量化特性,明白了这一点,数据操控事倍功半。那什么是向量化特性呢?下面用一个简单的栗子来说明:
data1 <- 1:5
data1
[1] 1 2 3 4 5
data2 <- data1 + 1
data2
[1] 2 3 4 5 6
data3 <- data1 + data2
data3
[1] 3 5 7 9 11
上面的代码首先创建了一个数值向量data1
,给data1
的每个元素都加1,利用向量化操作只需用data1 + 1
即可实现;data1
每个元素都加不同的数值,利用向量化操作来实现只需准备好另外一个向量data2
,然后data1 + data2
就可实现。如果没有向量化特性,想要实现前面的操作那就得借助循环来实现,与向量化操作相比,使用循环的话高低得多整几行代码了。虽然向量化特性好用,但使用时还是有需要注意的地方。看下面的例子:
data1 <- 1:5
data1
[1] 1 2 3 4 5
data2 <- 6:8
data2
[1] 6 7 8
data3 <- data1 +data2
Warning message:
In data1 + data2 :
longer object length is not a multiple of shorter object length
data3
[1] 7 9 11 10 12
从上面的代码可以看出,data1
和data2
长度虽然不同却能直接相加,但得到结果未必是想要的。由此可知,R语言的兼容性很强,所以使用时需要有正确的判断。
数据读写
这个自不必多说,毕竟首先需要将自己的数据读取到R环境中,然后将处理好数据保存到文件里面。这样的常规操作有对应的函数可用,调用一下即可。
分支
分支判断就不多说了,想要完成复杂的数据处理还是有必要的。不过,简单的分支判断还是交给R自带的ifelse
函数来处理吧,效率不错。
循环
for
、while
两种循环方式根据情况选择,不过,R里面有个循环函数家族,如apply
、sapply
等都是经常使用的函数。还是那句话,优先考虑用循环函数解决,效率高,充分发挥R语言的特性。
函数
前面说过R语言用起来之所以快捷一方面是基于函数调用,来自R内部及扩展包的函数所形成的生态基本覆盖了数据分析和可视化。站在别人的基础上,只需准备好函数所需的输入,即可得到想要的结果。函数便于代码复用,对于经常使用的功能写成函数确实可以提高后续的工作效率。
结束语
R做为可以交互式使用的脚本型语言,可以说语法规则是相当的简单,有了上面提到的那些知识,基本上可以根据别人的代码照猫画虎了。从语言的使用角度来说,基本上也算入门了。不过,R语言虽然简单,但想要用的得心应手也不是那么容易,就像学开车,把车开动起来也许不难,但想要成为经验丰富的老司机还是需要多多实践。
虽然上面提到的那些方面都是基础,但却是使用R的第一步,就写文章一样,第一步是认字,然后是组词造句,再者是连句成文,如果顺序反过来,定然会浪费很多时间在查字典与纠错上。能不能写出文章由基础决定,能不能写出好文章那就是另外一回事了。
前面提到R无需复杂的编程过程,这源自于向量化特性和函数调用,前者简化了循环,后者方便了过程,两者结合更是提高了效率。说了这么多,为啥没有提画图呢?因为用R画图本质上也是调用函数,只不过有时候形式上也许会有不同,如鼎鼎有名的ggplot2
用+
叠加图层的过程。
对于使用工具或方法,很喜欢一句话:知其道,用其妙!不废话了,来来来,让咱们一起努力成为调包侠。。。😄😄😄
往期回顾
linux入门学习指南
武林大会之对角线热图
ggplot2 | 绘制双y轴的图型
tidydr | 一行代码搞定小坐标系
rnanorm | 一行命令搞定RNA-seq标准化
网友评论