R语言的学习

R语言_函数认知&R包安装

2022-05-22  本文已影响0人  Ashu

主要从以下三方面去学习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包是什么?

2.2 为什么要安装R包?

使用到哪个包就去安装和加载,知道要用的函数以及简单使用规律,查看帮助文档入门,统计学学到一定的程度,不要默认值,去指定值,这个过程可以调试。

目的不是学会某个具体的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包时,包的名字加引号

###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 国内镜像推荐:

两个镜像可以选择用,在国外不需要设置国内镜像,看看下载速度怎么样,需不需要设置镜像。

2.5.2 设置镜像的方法:

缺点,只能设置CRAN镜像,不能设置Bioconductor镜像

缺点:只能用一次,每次重启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 安装包--加载包--使用包里的函数
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 是否更新

懒惰策略:能不更新就不更新,除非一直报错,优先输入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包不存在

依赖的包,都要安装,先安装报错提示不存在的包(不存在谁安装谁,缺啥补啥)

大多数情况下:

安装A,就会自动安装BCD包

加载A,就会自动加载BCD包

也会有一部分包会出错。

2.7.5 依赖包的版本不够新

卸载更新,就是重新下载

小规律:安装和加载过程中的报错信息,注意看引号"",引号里大多是依赖包的名字

更新一个包:重新安装,或先删除再重新安装。

更新所有的包:update.packages(),括号里什么都不写,更新会花很长时间。

2.7.6 报错中有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包的使用场景

一般?包名,注意函数的形式参数、实际参数以及默认参数。

2.9 R包如何使用-获取帮助

2.9.1 快速查看函数帮助文档

问号函数名,问号包,如?ggplot?sd,有的包不写帮助文档。

2.9.2 找R包介绍页面(直接搜)

https://bioconductor.org/packages/release/bioc/html/limma.html

也可以在google和必应上搜别人的中文教程

2.9.3 Vignettes 在线教程
browseVignettes("stringr")
##运行后弹出网页

作者给了入门教程,这种优秀包的教学很多都被翻译成中文教程,发布在各个中文网页上,自己可以向别人学习。

2.9.4 少数R包有cheatsheets

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包的方法,函数才能顺利调用处理数据和作图。

上一篇下一篇

猜你喜欢

热点阅读