这节课同样干活满满,只挑了自己感兴趣的记了,不是特别全
1.函数与参数
(1)形式参数与实际参数
函数(括号里是形式参数,由函数作者设计,不可修改,熟练后可不写)
形式参数的内容就是实际参数,使用者可以进行改动
(2)写函数的函数
代码语言:R复制function()
jimmy <- function(a,b,m = 2){
(a b)^m
} #举例
jimmy是函数名称
function()是创造函数的函数,括号里是形式参数,有默认值就写上,例如这里的m=2
{}里的内容是实际原理,是编写函数使用的代码,每一个变量都是上面的参数,使用时填写实际参数
代码语言:R复制#使用示例
jimmy(a = 1,b = 2)
jimmy(1,2)
jimmy(3,6)
jimmy(3,6,-2)
函数只区分“是什么”(数据类型/数据结构),与“怎么得到的”无关
当一个代码需要复制粘贴三次,就应该写成函数或使用循环
代码语言:R复制#plot画iris的前四列
jimmy <- function(i){
plot(iris[,i],col=iris[,5])
}
jimmy(1)
jimmy(2)
jimmy(3)
jimmy(4)
(3) 默认参数
作者可以为参数设置默认值
不是所有的参数都要出现在使用者的代码里,没写的会使用默认值
2.R包(R package)介绍
R包可以理解为是多个函数的打包存放,也可以只有数据
包含函数、示例数据、帮助文件、描述文件等
2.1 为什么要安装R包?
为了完成特定的分析功能,需要用相应的包实现
2.2 伪问题:学一个R包要多久
按需学习,按需查询
目的不是学会某个具体的R包,而是学习使用思路
2.3 R包都在哪里
(1)CRAN网站,R的官网,可以通过install.packages()完成下载和安装,注意包名要加引号
(2)Bioconductor,用BiocMananger::install(),前提是安装好BiocMananger
其中biocLite是过时命令,使用install安装就行
(3)GitHub,用devtools::install_github(),需要写上R包作者用户名和包名,需要去网上搜索,举例 devtools::install_github('jmzeng1314/idmap1')
2.4 不知道从哪里来的包?
搜一搜或者试一试,问问ChatGPT
2.5 安装后需加载
即library或require(),差别是require()返回结果可以转化为逻辑值
一次安装,每次打开新的session都要加载
2.6 怎样实现快速下载——镜像网站
镜像网站相当于主网站的副本,访问主网站存在障碍时,可以使用访问镜像网站替代
R和bioconductor主网站位于国外,选择国内的镜像可以加快速度
方法1:tools——global options-packages——primaryCRAN repository进行修改,大机构一般都比较稳定,如果选择自己学校再用校园网可能会非常快
但这只是CRAN的修改方法,修改后访问bioconductor的地址不会变
方法2:用代码修改
代码语言:R复制options("repos"=c(CRAN="http://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options(BioC_mirror="http://mirrors.ustc.edu.cn/bioc/") #这是改BioConductor镜像的
options(BioC_mirror="https://mirror.sjtu.edu.cn/bioconductor") #这个是交大的镜像
#各自学校的镜像自己再搜搜
2.7 R包安装和使用的逻辑
安装包——加载包——使用包里的函数
注意有的时候函数名重复,有时代码报错是原来的R包没有加载
library()是检查R包是否安装成功的唯一标准,library没有error就代表成功
已经成功安装的包,可以用::快速调用里面的函数,但此时这个包并未在session里加载,即再次调用这个包里函数时,还得写pheatmap::pheatmap,或者重新library这个包
2.8 经典报错
情况1:
代码语言:R复制not installed when version(s) same as current;use 'force = TRUE' to reinstall
#已经安装了一个包,试图安装更高版本的包,不用管
情况2:
代码语言:R复制package not available
原因1:包名写错
原因2:安装命令使用错误,用cran安装非cran的包
原因3:本机的R语言版本与包所要求的版本不符(极少),可以选择历史版本的R包
原因4:包过时被剔除了,例如birta,也可以搜搜ChatGPT看看
!R语言版本99%的情况下没有问题,但它总是无辜被怀疑
情况3:
代码语言:R复制Updata all/some/none
懒惰策略,能不更新就不更新,除非一直报错
不想回答,安装命令加参数:updata=F,ask=F
!学R语言高冷,能no就no,no不行再yes;学linux要听话,让你yes你就yes
情况4:加载A包,报错B包不存在
先安装B包再说,一般来讲问是否更新时,“不存在”的是依赖包
此时可能是依赖包未安装或依赖包版本不够新
注意:报错里的引号里大多是指一个包
R包的更新是通过卸载旧包再安装新包,方法:
打开package面板,其中前面小方格里√是已加载的包,这个√有滞后性,需要刷新一下
更新的时候先取消加载,即点掉√,然后包同一行右侧有一个小叉号,点击叉号卸载包,再重新安装
情况5:关键词connecttion,internet,url,404,http,download
一般是网络异常的关键词
可能原因:没联网、校园网限制、镜像没设置、镜像崩了
情况6:not writable/permission deny
windows专属问题,权限问题:管理员方式重新打开Rstudio,重新运行代码
或者按照小洁老师的b站视频修改R的权限问题
情况7:cannot create dir :'C:Users???????'
中文用户名引发,需要修改环境变量(控制面板——高级系统设置——环境变量),具体的我没太看懂,遇到的人自己搜搜吧
2.9 如何获取帮助
(1)快速查看函数帮助文档 ? 函数
(2)网页找R包介绍页面(包括可引用的文献)
(3)Vignettes R包作者的在线教程,阅读时需要package安装并加载好
代码语言:R复制?seq
browseVignettes("stringr")
ls("package:stringr")
2.10 R包的使用场景
1.某些流程代码中用到某些包
2.学绘图
3.别人的代码套自己的数据,报错不会改
大多数包里的函数规律一致,不需要单独学习,用到哪个函数学哪个函数
少部分包里的函数自有语法,例如ggplot2,dplyr
其他要点:符号的提示作用
$:数据框取列,列表取子集
=:赋值,或连接形式参数与实际参数
{}:多行代码
重要TIPS
1.分画板
代码语言:R复制par(mfrow = c(2,2)) #把画板分成四块,两行两列
#如果报错,把右下角画板拉大一点即可
2.一个安装package的代码块
代码语言:R复制if(!require(stringr))install.packages("stringr")
原理:require返回结果受 ! 影响转化为逻辑值,if(FALSE)则后面的代码被跳过,if(TRUE)则后面的代码被执行
3.ls()函数
代码语言:R复制ls('package:stringr') #列出包里有哪些函数
生信技能树,生信马拉松