主要从以下三方面去学习R语言函数与R包:
1.R语言函数:
形式参数
实际参数
默认参数
了解函数的方式
2.R包:
- 什么是R包
- 设置镜像
- R包安装
- R包加载
3.常见问题以及解决办法
1.函数与参数
函数是括号前的英文字母或是单词,不可以乱改,都是别人写好的,使用到一定程度可以用function函数去创造属于自己的函数,函数都会有帮助文档。形式参数也是作者的成果,不能乱改,大多数形式参数是可以省略。
1.1 形式参数与实际参数
=
前面为形式参数,函数作者设计的,熟练后不用写。=
后面是实际参数,使用者可改的。
seq(from=3,to=20,by=3)
##括号前面为函数seq,括号前面的英文字母都是函数。from、to、by为形式参数。
seq(3,20,3)
##熟练后可以把形式参数省略
1.2 写函数的函数
jimmy <- function(a,b,m=2){
(a+b)^m
}
##1.开发函数的观摩过程:jimmy为函数名称,括号前面的英文字母都是函数名,a,b,m=2为形式参数,function的固定写法,后面一定要跟着一个小括号和花括号。小括号里面放的是参数,是函数jimmy的参数,a,b为形式参数,m=2,2为m的默认值,如head函数的n默认值为6;花括号里的是开发过程中对这些参数使用了什么代码,在使用任何人的函数,没什么特殊情况,不需要看内部的拆解,就是不需要看花括号里写了什么内容,只需要了解使用和参数就可以。(a+b)^m,a,b,m都应该是数值,为编写函数的代码。
##head()的默认参数为n;rnorm()的默认参数为mean,sd;pheatmap()的默认参数为cluster_rows = 且只有两个选项F或T。?head()去查看帮助文档,了解默认参数的值。
##2.使用过程
jimmy(a=1,b=2)
#[1] 9,(1+2)^2
##括号前是函数,使用一定要加括号,才能放参数值。
jimmy(1,2)
#[1] 9
##把a,b形式参数省略
jimmy(3,6)
#[1] 81 ,(3+6)^2
jimmy(3,6,-2)
#[1] 0.01234568
##(3+6)^-2,把m=2改为m=-2,如果给字符型会报错
m2d=function(x){
mean(x)+2*sd(x)
}
m2d(rnorm(10))
#[1] 2.265964
1.3 复习函数绘图plot()
函数绘图plot():凡是一个数值型向量
都可以进行plot绘图,数值型向量作为图的纵坐标,向量的下标作为图的横坐标。
par(mfrow = c(2,2))
#把画板分成四块,两行两列
x = c(2,5,6,2,9);plot(x)
x = seq(2,80,4);plot(x)
x = rnorm(10);plot(x)
x = iris$Sepal.Length;plot(x)
思考:plot画iris的前四列?
##iris是R语言内置的一个数据集,前4列为数值型。
plot(iris[,1])
plot(iris[,2])
plot(iris[,3])
plot(iris[,4])
plot(iris[,1],col = iris[,5])
plot(iris[,2],col = iris[,5])
plot(iris[,3],col = iris[,5])
plot(iris[,4],col = iris[,5])
##col =为加颜色,iris[,5],5为iris的第5列,有3个品种,每个品种重复50次,有多少个品种就给多少种颜色,颜色配色是默认的,可以修改。
当一个代码需要复制粘贴三次,就应该写成函数或使用循环
jimmy <- function(i){
plot(iris[,i],col=iris[,5])
}
jimmy(1)
jimmy(2)
jimmy(3)
jimmy(4)
##代码的唯一差别是[,1]里的列1,2,3,4。
1.4 默认参数
凡是没有说明,但是在代码有一个取值的。作者会设计很多参数,但是只有前1-n个是必须填的,其他的参数都必须有默认值。
g<-function(x,y=2,z=T){...}
##y=2,z=T为形式参数,自己不喜欢,可以指定。如rnorm有3个参数,只写一个参数,可以跑起来,对结果不满意可以修改默认值。
1.5 了解函数的方式
1.5.1 查看帮助文档和运行示例:?函数名
?read.csv
在帮助文档里,了解函数的用法以及参数的详细介绍,通过示例来快速了解函数
1.5.2 直接运行函数
ggplot
在脚本编辑器或是控制台运行函数名,不需要加括号,会显示函数所在的包,代码,有的包含作者等信息。
2.R包(R package)
2.1R包是什么?
R程序包是多个函数的集合,具有详细的说明和例子。
有的R包只有数据,没有函数(如gtf或是基因的文件,使用时加载就可以)。
包含R函数,数据,帮助文档,描述文件等。
按照一定的规则,存放到网站。
2.2 为什么要安装R包?
特定的分析功能,需要用相应的程序包实现。
例如:作图包ggplot2,差异分析包limma等。
使用到哪个包就去安装和加载,知道要用的函数以及简单使用规律,查看帮助文档入门,统计学学到一定的程度,不要默认值,去指定值,这个过程可以调试。
目的不是学会某个具体的R包,而是找所有R包使用的规律。
2.3 R包都在哪里
通常来源三个网站
2.3.1 CRAN网站
该网站有最新R语言的软件,也有一些最新的R包。在该网站下载的R包都用install.package()
去安装。
install.package()
2.3.2 Bioconductor网站
该网站含有和生物,生信相关的R包,如limma包。用BioManager::install()
去安装,2018年以前写的生信教程,安装该网站上的包用Bioclnstall::biocLite(),现在不能使用了,但是有些代码能用,比如limma每年更新,只是在细节上。现在该网站上的包统一用以下的安装方式:
BioManager::install()
2.3.3 Github网站
CRAN网站和Bioconductor网站的包是有专人管理,开发者把代码都是经过调试,提交和审核。而github网站的包是没人管理,包其实一般没什么问题。安装方式devtools::install_github()
,安装方式与前两者不一样,因为没人审核,R包名可能会重复,所以安装R包时得加上用户名:用户名/R包名
devtools::install_github(“jmzeng1314/idmap1”)
2.4 R包怎么安装和加载
2.4.1 R包怎么安装
每一个包是从哪里来的,就决定它是用什么代码去安装,安装R包时,包的名字加引号
- 常用三种在线方式安装R包:
###1.CRAN:
install.package()
install.package("stringr")
###2.Bioconductor
BioManager::install()
BioManager::install("ggplot2")
###3.Github
devtools::install_github()
devtools::install_github(“jmzeng1314/idmap1”)
问题:作为初学者,没有接触过的R包,不知道这个R包从哪里来?
先用前两种安装方式试试,Github上的R包是没法试的,用必应或是百度搜索,R包是从哪里来,再从以上3种安装方式选对应的方式安装。
- 本地安装:
有一些R包非常,如存放注释信息的R包,有六百多MB,用镜像下载非常慢,可以先下载到本地电脑,在本地安装。这种情况非常少见,如:
devtools::install_local("TCGAmutations-master.zip")
2.4.2 R包怎么加载
安装R包后需要加载,没有安装过的包是没法加载的,才能使用里面的函数,加载R包时,包名不需要加引号
。
常用的加载方式:library()
library(stringr)
##加载R包,包名不要引号,常用的加载方式,是检查是R包否安装成功的标准
require(stringr)
##另一种加载R包的函数:require()
R包安装一次就可以,每次打开新的session(Rstudio窗口)都要加载需要用到的R包。
2.5 怎么样实现R包快速下载
镜像网站相当于主网站的副本,访问主网站存在障碍时,访问镜像网站也可。
R和Bioconductor主网站位于国外,选择国内的镜像可加快访问速度。
2.5.1 国内镜像推荐:
清华镜像(TUNA,Beijing)
http://mirrors.tuna.tsinghua.edu.cn/CRAN/
http://mirrors.tuna.tsinghua.edu.cn/bioconductor/中科大镜像(USTC,Hefei)
http://mirrors.ustc.edu.cn/CRAN/
http://mirrors.ustc.edu.cn/bioc/
两个镜像可以选择用,在国外不需要设置国内镜像,看看下载速度怎么样,需不需要设置镜像。
2.5.2 设置镜像的方法:
- 方法1:Rstudio设置
缺点,只能设置CRAN镜像,不能设置Bioconductor镜像
- 方法2:代码设置
缺点:只能用一次,每次重启session(Rstudio窗口)安装R包时需要运行,对于新手把这两句代码放到网页笔记里比较方便查找,不要嫌麻烦,并不是每天需要装包。一般装一两个R包只要网络没问题,从官方网站下载也可以。(有永久性办法,但是会对一些电脑配置有影响)
options("repos"=c(CRAN="http://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options(BioC_mirror="http://mirrors.ustc.edu.cn/bioc/")
2.6 R包安装和使用逻辑
2.6.1 安装包--加载包--使用包里的函数
顺序乱了就会报错:找不到函数(could not find function...),不存在包叫'syringr‘等。
某些包在安装过程中会出现一大堆提示信息,只要不出现Error就不用理会。
安装之后里立即library(),有时会出现一大堆信息,只要不出现Error就不管。
安装同一个网站上的多个R包时,可以c()函数,把多个包放进去,一次性安装。但是加载时,不能一次加载多个包,一次只能加载一个包。
2.6.2 已安装、不加载,快速使用
::
前面是一个包的名字,::
后面是一个函数的名字,两者的联系是一个从属关系。用::
这种方式去安装R包,就不需要使用library。
BioManager::install()
dplyr::filter()
devtools::install_github()
报错没有BioManager和devtools的解决办法:
install.packages("tidyr")
install.packages('BiocManager')
BiocManager::install("ggplot2")
install.packages('devtools')
devtools::install_github("jmzeng1314/idmap1") #括号里写作者用户名加包名
2.7 常见疑问
2.7.1 大片提示信息
安装和加载包是,看到一大片提示信息:
解决办法:检查是否有Error,没有就忽略,说明加载成功。
2.7.2 package not available
100%会遇到,导致的原因有:
原因1:包名写错(包没有安装是没法用tab键自动补齐的,容易写错)
原因2:安装命令使用错误(最常见,CRAN的包用了Bioconductor的安装方式,如GSVA包)
原因3:本机的R语言版本与包所要求的版本不符(极少)
R语言版本99%的情况下是没有问题,但它总是无辜被怀疑。一般4到5年没更新,有些R包没法装上才可能出现问题。
原因4:包过时被剔除了
去网页查找Depends:R(>4.0.0),如果说明包的使用是要求版本的,使用的R语言没有达到版本会报错。更新R语言就如剥一层皮,如果非要用,可以不用更新R语言,就在该包的页面上找历史版本。如果R语言版本太旧,就更新。
有些包不更新也不维护,依赖的包动了小细节,包也会报错,代码兼容性差一些,CRAN,Bioconductor会把这样的包移除掉,导致曾经这个包能用,现在是不能用的。CRAN(archive),Bioconductor(Removed Packages),从网页上搜这个包有没有过时,如果还能找到正常的页面,还能点进去告知怎么安装,还处在一个相对正常的话那就能用的。只有极少数的包会被移除,如birta,大多数包能正常使用。
2.7.3 是否更新
- 最后出现提示信息:Update all/some/none? [a/s/n]:
懒惰策略:能不更新就不更新,除非一直报错,优先输入n,出现问题再输入a,不要选s。
不想回答:安装命令加参数:update=F,ask=F,特别是批量安装R包时,因为更新也更新不出来什么东西。只要安装时不出现一大堆R包有问题,R语言版本就不管,比如用的是3.9,现在是4.2,一年或是两年后出现5再考虑。
”学R语言要高冷,能no就no,no不行要yes;学Linux要听话,让你yes你就yes“--from 小洁老师
2.7.4 加载A包,报错B包不存在
依赖的包,都要安装,先安装报错提示不存在的包(不存在谁安装谁,缺啥补啥)
R包之间存在复杂的依赖关系
使用A包,就必须同时用B、C,而C又依赖D包。
大多数情况下:
安装A,就会自动安装BCD包
加载A,就会自动加载BCD包
也会有一部分包会出错。
2.7.5 依赖包的版本不够新
卸载更新,就是重新下载
小规律:安装和加载过程中的报错信息,注意看引号""
,引号里大多是依赖包的名字
更新一个包:重新安装,或先删除再重新安装。
更新所有的包:update.packages(),括号里什么都不写,更新会花很长时间。
2.7.6 报错中有connection或url,404,http
网络限制了你的进步(报错中有connection或url,404,http,是网络问题)
网络问题有很多种原因:
不联网不能下载R包。
校园网限制时,换成手机热点。
镜像没有设置,从国外网下载,比较慢。
镜像崩了,可能性很小。
可能使用非法的软件。
- 解决:换个时间,换个网络。
2.7.7 分情况讨论
if(!require(stringr))install.packages("stringr")
##require(stringr)加载包。
as.logical(require(ggplot2))
Loading required package: ggplot2
#[1] TRUE,返回TRUE说明包能成功加载,FALSE表示不能成功加载。
require和library可以加载包,它们之间有一个差别,require可以被转变为一个逻辑值。
已安装,加载成功:require(包)返回TRUE;!require(包)返回FALSE。
未安装,加载失败:require(包)返回FALSE;!require(包)返回TRUE。
if(FALSE) 则后面的代码被跳过,不安装
if(TRUE) 则后面的代码被执行,安装
已安装,则不安装
未安装,则安装
2.8 R包的使用场景
某流程代码中用到某些包(正常安装后加载)
学绘图,用到ggplot2(非常优秀的包,需要单独系统学习,枝干上的一些知识点学完就可以学习无数的R包,其它包不需要单独学习)
别人的人代码套自己的数据,报错不会改(没有基础上容易出现的问题,需要比较自己的数据和别人的数据区别是什么,从R语言上讲,一个是数据类型,一个是数据结构,只要保证这两个没问题,一般没什么问题。)
大多数包里的函数规律一致,不需要单独学习,用到哪个函数学哪个函数
一般?包名
,注意函数的形式参数、实际参数以及默认参数。
- 少部分包里的函数自有语法,例如ggplot2,dplyr等。
2.9 R包如何使用-获取帮助
2.9.1 快速查看函数帮助文档
问号函数名,问号包,如?ggplot
,?sd
,有的包不写帮助文档。
2.9.2 找R包介绍页面(直接搜)
- 直接到官网搜索或是其它网站。
- Limma官网
https://bioconductor.org/packages/release/bioc/html/limma.html
也可以在google和必应上搜别人的中文教程
2.9.3 Vignettes 在线教程
- 不是所有的R包都有Vignettes在线教程,得运行后才知道有没有。
browseVignettes("stringr")
##运行后弹出网页
- 点击查看介绍
作者给了入门教程,这种优秀包的教学很多都被翻译成中文教程,发布在各个中文网页上,自己可以向别人学习。
2.9.4 少数R包有cheatsheets
cheatsheets:小抄,速查表。如RStudio Cheatsheets
会告诉包里面都有哪些函数以及每个函数怎么用的。
- 搜索RStudio Cheatsheets,官网如下:
https://www.rstudio.com/resources/cheatsheets/
2.10 补充知识点
列出一个包里都有哪些函数或是数据:ls("package:包名")
,一定要先library()
library(stringr)
ls("package:stringr")
##查看一个包有哪些函数,方便学习
rm(list = ls())
a = 1
b = 2
ls()
#[1] "a" "b"
##把环境里的几个变量名称组成一个向量
library(ggplot2)
ls("package:ggplot2")
3 总结
3.1 R语言里的符号
()
函数
[]
向量、数据框、矩阵取子集
[[]]
列表取子集
$
数据框取列,列表取子集
=
, <-
赋值,=
除了赋值符号,也可以做形式参数和实际参数的连接,
==
判断是否相等
!
否定
{}
多行代码,如function后面
#
注释
""
字符串,单引号或是双引号都可以
::
包::
函数,一个包里面的函数,在不加载包的情况下使用它。
@
符号对象,和$
差不多,@
是给对象取元素或是子集,用$
还是用@
主要是里面的结
构,对比使用再决定使用哪一个。
3.2 解决问题的正确姿势
遇到一个问题:如报错,异常值等,检查代码是否有问题。
环境问题,找不到对象,考虑引号和赋值等情况,文件是不是在工作目录下,看不懂是什么报错,重启是一种神奇地解决办法。
数据:之前的代码能运行,换了一个数据后,代码不能运行,检查数据有什么不同,数据结构,数据类型,异常值。
搜报错:把报错信息直接贴到谷歌或是必应搜索。
有效提问:让问题具体化一些。
3.3 认清楚函数和数据
函数:在括号前的英文字母或是字母组合,对陌生的函数,用?函数名
调用帮助文档,里面的示例方便理解。
形式参数:熟练函数的用法,形式参数可以省略。
实际参数是出现最多遍的东西:更换数据,画图的设置
文件名(数据):R语言代码里经常会出现文件名字以字符串的名字出现在实际参数的位置上。而且实际参数所在的函数,必须是能够识别这种文件名,能够处理文件名
数据框或是矩阵以及列表:数据框或是矩阵的标志[ ];列表的标志[[ ]]。
R包library的括号里,library(),括号里肯定是R包。
说明
以上内容是听生信技能树小洁老师的R语言线上课,根据自己的理解记录下来,小洁老师授课非常细心,对不同水平的同学都照顾到,并且补充很多技巧以及注意事项。
成功安装R包是顺利分析第一步,记住小洁老师说的多搜一搜,多试一试,找到正确安装R包的方法,函数才能顺利调用处理数据和作图。