• 看完不会来揍我 | R包的下载与安装 | 再也没有一个包可以逃出你的手掌心啦


    好久不见!非常抱歉有一段时间没有更新正经内容啦!主要是最近接了一个项目和一个一对一指导,实在是精力有限,又不想随便写几篇应付大家。毕竟,咱们主打高质量嘛!来!大声喊出来!

    「要知道出品!必属精品!」

    咱们还是希望重质量而不是重数量,我可能更新频率会慢一丢丢,但是一定保证内容优质!希望大家理解和支持!谢谢大家!!!

    经常会有小伙伴们在群里提到一些R包安装相关的问题,真的是五花八门的报错内容和玄幻事件!我可太懂了!!!然后我就在想要不要专门出一期,但是又感觉这类教程网上还是蛮多的。BUT!我前滚后翻地左思右想了一下,咱还是得来一波!因为,咱们是独一无二的**「要知道」**呐!要知道,看完不会还得来揍我呢哈哈哈哈哈哈!要知道,要努力变强!

    啊!突然在想要不要从头开始,从R与RStudio的安装开始介绍呢!啊!好多啊!要不要呢!后续再说!估摸着我也得开始准备啦!

    今天就先介绍R包的下载与安装!因为我现在脑子里已经塞满了它!

    噢对!在此之前,我先暗戳戳推荐几个大家可能感兴趣的内容:

    想知道什么是包为什么要开发包以及如何开发包的,可以看这里:R · R 包开发 | 保姆级教程(这个也有视频讲解)

    开发好之后怎么让别人也能下载安装使用呢?可以看这里:使用 git 命令行上传项目到 GitHub(以 R 包为例)| 附视频讲解

    正式开始!!!

    最最最常用的install.packages

    install.packages()可以说是我们的鼻祖了!众所周知,R官方的包都会放在CRAN上,我们可以在https://cran.r-project.org/web/packages/available_packages_by_name.html中进行查找(也可以使用命令available.packages()查看 CRAN 上的包)。

    已经上传到CRAN的包,我们的安装方式就比较简单啦!像下面这样,一步即可搞定!

    install.packages("包的名称")
    install.packages("BiocManager")
    install.packages("ggplot2")
    
    # 也可以像这样指定镜像,速度更快,不过一般大家应该都修改过镜像了已经!
    # 啊,我后期专门再出一期介绍镜像以及如何修改镜像等等!
    install.packages("ggplot2", repos = "http://mirrors.tuna.tsinghua.edu.cn/CRAN/")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    当然,大家可能也经常见到下面这种写法:

    if(!require("BiocManager"))
      install.packages("BiocManager")
    
    • 1
    • 2

    那为啥要这么写呢?

    require() 其实是一个用于加载指定的软件包(package)的函数。其作用是检查指定的软件包是否已经安装,如果已经安装则加载该软件包,如果未安装则会返回 FALSE。如果软件包加载成功,require() 函数返回 TRUE。

    所以上面的代码含义是:首先我们使用require()尝试加载名为 “BiocManager” 的软件包。如果该软件包未安装(即 require("BiocManager") 返回 FALSE),则执行 install.packages("BiocManager"),以自动安装 “BiocManager” 软件包。

    这个时候可能有小伙伴会问了,那require()是用于加载包的,那我们最最最常用的library()又算什么呢?难不成咱们要抛弃陪伴了我们很久的library()

    非也非也!且听我细细道来!

    在R语言中,require()library()函数都用于加载包,但它们在失败时的行为略有不同。

    1. library()函数

      • library()函数是最常用的加载包的方法之一。
      • 当使用library()函数加载一个不存在的包时,会产生一个错误,并停止执行后续代码。
      • 如果包已经加载,则library()函数不返回任何值。

      示例:

      library(ggplot2)
      
      • 1
    2. require()函数

      • require()函数也用于加载包,但是在包不存在时不会产生错误。
      • 如果包不存在,require()函数会返回FALSE,但不会停止执行后续代码。
      • 如果包已经加载,则require()函数返回TRUE。

      示例:

      if(!require(ggplot2)) {
        install.packages("ggplot2")
        library(ggplot2)
      }
      
      • 1
      • 2
      • 3
      • 4

    所以呀,一般来说,如果你确定你的代码需要某个特定的包来运行,而且这个包不应该缺失,那么使用library()函数肯定更合适!那如果你的代码在包缺失时可以进行某种备选方案或处理,并且不希望因为包缺失而停止执行后续代码,那么使用require()函数可能更合适。

    比如在上面的例子中,我们在写脚本的时候肯定不希望未来因为这个包不存在而导致代码运行失败,所以使用require()函数进行判定,就可以依据其结果进行不同的后续操作,避免报错发生导致代码停止执行。我们经常会在一些博主给的代码或者已经写好的脚本中看到这种写法对不对!

    啊啊啊啊啊报错了怎么办

    咱们上面有提到,install.packages()主要用来安装已经上传到CRAN上的包,那如果我们需要安装的包不在CRAN上,那我们该怎么办呢?如果我们用install.packages()去安装CRAN中并不存在的包,那会发生什么呢?你一定见过类似下面的报错吧!

    > install.packages("limma")
    Warning in install.packages :
      package ‘limma’ is not available for this version of R
    
    A version of this package for your version of R might be available elsewhere,
    see the ideas at
    https://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    报错显示:哎呀呀,这位小姐姐/小哥哥,真是不好意思呐,非常抱歉哟!你要安装的这个limma包在你当前版本的R上不可用呢!

    你是不是会觉得,哎呀,那我去调整一下我的R版本或者换个limma包的版本不就好啦!

    NONONO!大错特错!你要真的乖乖去这么干了!那可就算是一下午一晚上耗在这里咯!然后就会感慨!啊!不想干了!吃个淀粉肠去吧!

    来!今天过后!你就再也不怕遇到它了!兵来将挡水来土掩!素质不详遇强则强!呸!串台了!我们继续!

    BiocManager也是我们的好帮手

    如果你知道或者通过某些证据发现你要安装的包不在CRAN上,那可以再看看它在不在Bioconductor上,可以在https://bioconductor.org/packages/release/BiocViews.html#___Software中查找(也可以使用命令BioManager::available()查看Bioconductor上已有的包)。

    有的小朋友可能对于BiocManagerBioconductor有点傻傻分不清,不要慌!俺在这里简单介绍一哈!

    1. Bioconductor
      • Bioconductor是一个开源的生物信息学软件项目和资源库,旨在提供用于分析和理解生物学数据的工具。它提供了大量的生物信息学软件包,涵盖了基因组学、转录组学、蛋白质组学等领域。
      • 这些软件包通过R语言编程环境提供,并且遵循一致的质量标准和文档。
    2. BiocManager
      • BiocManager是一个用于管理和安装Bioconductor软件包的R包。
      • BiocManager提供了一种简便的方法来安装、更新和管理Bioconductor软件包,允许用户通过R语言的命令行或脚本轻松地安装Bioconductor软件包和依赖项。

    所以,我们可以把BiocManager视为Bioconductor的一个辅助工具,用于管理Bioconductor的软件包的安装和更新。Bioconductor提供了丰富的生物信息学软件资源,而BiocManager则简化了对这些资源的访问和管理,是我们的一大帮手!!!

    那要怎么用嘞!首先需要先安装BiocManager包,BiocManager包已经上传到了CRAN上,所以我们用上面介绍的最最最常用的install.packages("BiocManager")即可对其进行安装。

    if(!require("BiocManager"))
      install.packages("BiocManager")
    
    • 1
    • 2

    然后呢,我们就可以安装Bioconductor中的包啦!像下面这样:

    BiocManager::install("包的名称")
    BiocManager::install("limma")
    
    • 1
    • 2

    是不是非常简单粗暴!

    GitHub也是必不可少滴

    不管是CRAN还是Bioconductor,其实对于包的质量要求都是蛮高的,需要经过严格的审查,还要定期维护,还要保证兼容性,还要巴拉巴拉……等等等等,以确保它们的质量。所以,许多包的开发者会选择使用GitHub来托管他们的包,因为GitHub提供了一个更加方便的平台来进行版本控制、合作开发和社区贡献等等,可以在https://github.com/中进行查找。

    当然哈,我不是说上面的包质量就不好哈,当然肯定有不好的,但也有超级优质的!

    devtools

    那GitHub上面的包怎么安装呢?老规矩,也是要提前安装别的包比如devtools,然后再用它来安装GitHub中你需要的包。

    if(!require(devtools)) {
      install.packages("devtools")
    }
    
    devtools::install_github("GitHub用户的用户名/包的名称")
    devtools::install_github("jinworks/CellChat")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    上述示例代码表示使用devtools包中的install_github()函数,从GitHub上安装名为"CellChat"的包。"jinworks/CellChat"是包的GitHub存储库地址,"jinworks"是GitHub用户的用户名,"CellChat"是该用户在GitHub上的一个名为"CellChat"的存储库(即R包的名称)。所以,这行代码的意思就是从GitHub用户"jinworks"的"CellChat"存储库中安装R包。

    那这个存储库地址怎么找呢?其实你用任何搜索引擎(建议必应)随便一搜,就可以搜索到你需要的包,比如CellChat,界面如下:

    左上角红框框的地方就是啦!复制粘贴一条龙搞定!

    访问令牌token设置

    (如果你不是第一次鼓捣这玩意儿,咱就跳过这里直接看下面就好哈!)

    如果你是第一次用你的设备或者服务器从GitHub下载东西或者安装包,那你可能会遇到类似下面这样的问题:

    不要慌!这只是说明你没有通行证罢了!咱们设置一下就好啦!

    首先!你需要获取这个通行指令,我们把它叫做访问令牌token(personal access token),大家可以把它理解为GitHub需要你做一个身份验证,如果你给你的设备或服务器设置了正确的验证密码,GitHub那边验证通过后,你才可以访问GitHub那边的资源。

    那我们要如何获取这个token呢?

    先这样这样,再那样那样!哈哈哈哈哈哈哈哈!

    我们登录GitHub,GitHub的注册我就不讲了哈!相信聪明如你,一定可以搞定!登录之后呢,我们点击右上角的头像,眼睛往下走走,可以看到Settings,点它:

    进去之后往下滑,可以看到Developer settings,点它!

    进去之后,是这个界面,先点红色箭头的地方(Personal access token),再点绿色箭头的地方(Tokens (classic)):

    然后就会进入如下页面,这个页面显示的这些,都是我曾经设置过的tokens,咱们点击红框框的位置(Generate new token),开始设置Token:

    咱们选择下面那个经典的,也就是红框框部分(Generate new token (classic)):

    然后可能会需要你输个密码,就是你的GitHub账户密码啦!

    铛铛铛铛!接下来就是正式设置你的token啦!红色框框是你想给这次的token起的名字(命名权掌握在你手里),绿色框框是你给这个token设定的有效期(它的死期也是你说了算),蓝色框框是你允许这个token可以帮你做的事情们(我经常是咔咔一顿选,不过大家一般是为了下载安装罢了,有兴趣的小伙伴可以挨个看看它们的用处)。

    设置好这些之后,咱们往下滑,就可以看到大大的Generate token,点它!这次的token就设置完成啦!

    距离成功还有一步之遥!红框框里就是你的token啦!点击绿色箭头所指部分,复制你的token。

    现在该打开你的RStudio啦!运行usethis::edit_r_environ(),即可出现以下界面:

    可以看到,一个名为.Renviron的文件被打开啦,里面是空的(如果你之前设置过,那么这里应该会有你之前存放的token,等未来你的token过期了,你需要再次更新的时候,你打开里面就会出现你现在设置的token啦),我们把刚刚在GitHub复制好的token按下面展示的方式粘贴在这里就好啦!就像这样:GITHUB_PAT="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”

    保存!完工!

    然后你重新打开RStudio,再次安装,这波就一定会成功啦!

    devtools::install_github("jinworks/CellChat")
    
    • 1

    remotes

    remotes包是另一个用于从GitHub等远程源安装包的工具。与devtools类似,使用remotes包安装GitHub上面的包的方式如下:

    使用remotes包,您可以通过install_github()函数从GitHub安装包,示例如下:

    if(!require(remotes)) {
      install.packages("remotes")
    }
    
    remotes::install_github("GitHub用户的用户名/包的名称")
    remotes::install_github("jinworks/CellChat")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    和上面devtools部分中描述的一样,"jinworks/CellChat"是包的GitHub存储库地址。

    devtools相比,remotes包通常更轻量级,因此有些用户更倾向于使用它来安装GitHub上的包。

    本地安装是最后的救命稻草

    如果前面几种方法都各种莫名其妙的报错或者网络原因无法下载安装,那就不得不拿出我们最后的底牌啦!

    我们需要从GitHub、Bioconductor下载你要安装的包的压缩文件到本地,然后导入RStudio,然后这样:

    install.packages("记得修改为你的压缩文件所在的路径/yaozhidao_0.1.2.tar.gz", repos = NULL, type = "source")
    
    • 1

    或者你直接点点点也可以!像下面这样:

    点击上面红色框框的Install Packages,然后就会出来下面这个东东:

    点击上图中红色箭头指的地方,就会出来下面这个,选择绿色框框:

    然后就会出来你的目录,选择你下载好的压缩文件,然后点击Browse,选择你下载好的压缩文件(我试了一下,这个好像是自动选择好的耶):

    最后点击红色箭头所指的Install就可以大功告成啦!

    或许conda也能助你一臂之力

    如果你是在服务器操作的话,那,conda牛批[破音]!!!!!

    关于conda的使用,有需要的小伙伴们可以去查看我的古董推文:利用 bioconda 管理生物信息软件

    直接这样这样那样那样!就OK啦!

    conda install -c bioconda “包的名称”
    
    • 1

    建议包名+conda,先搜一下,比如tidyverse

    点进去!它会告诉你用什么命令安装最合适!

    常见疑难杂症

    是否安装成功

    1. 安装成功标准:使用library()函数加载包时没有报错。
    2. 快速调用函数:使用::操作符可以快速调用包中的函数。

    安装失败原因

    1. 包不可用
      • R版本与包要求的版本不兼容。
      • 包已过时或停止更新,不再符合要求。
      • 也可能是你个小马虎把包名或者安装命令写错咯!
    2. 依赖关系:R包之间存在依赖关系,如果依赖的包不存在,加载失败,需要按提示安装缺失的包(要学会理解报错内容)。

    到底要不要更新

    当R包提示更新时,通常情况下不需要立即更新,我们忽略它的更新提示就好!咱主打一个能不更新就不更新!当然,除非不更新就没办法运行,或者与其他包不兼容等等,这种时候咱们还是要更新的!

    不过大家可以考虑以下情况:

    1. 功能需求:如果更新的版本包含了你需要的新功能或者改进,那么更新可能是有益的。比如,如果一个包添加了对新数据格式的支持,或者修复了之前存在的bug,这些更新可能会提高你的工作效率或解决一些问题。比如前段时间更新的Seurat,一定有很多小伙伴在纠结对不对哈哈哈哈哈哈哈!
    2. 安全性:有时候更新包也是为了修复安全漏洞。尤其是当使用的包涉及到数据处理、网络通信等敏感操作时,及时更新可以减少被恶意利用的风险。
    3. 兼容性:更新可能会解决与其他包或软件版本的兼容性问题。如果你在使用某个包时遇到了与其他包不兼容的情况,更新可能是解决问题的一种方法。
    4. 错误修复:如果你在使用某个包时遇到了错误,更新可能会修复这些错误。这些错误可能导致你的代码无法正常运行,因此更新可能是解决问题的关键。
    5. 维护:及时更新包也有助于保持你的环境处于良好状态,并且可以确保你能够获得最新的功能和改进。

    如果决定要更新的话,直接这样这样就可以:

    1. 更新单个包:直接重新安装需要的包即可,或者先删除再重新安装。
    2. 更新所有包:使用update.packages()函数。

    网络问题

    报错中出现如connectioninterneturl404httpdownload等这样的关键词,那就可能是你的网络或镜像有问题,可以考虑更换网络或镜像,也可以等一会儿再试试看,有时候网络问题蛮玄学的!

    权限问题

    出现关键词如not writablepermission denied可能是权限问题。解决方法是使用管理员权限重新打开RStudio,并重新运行代码。如果是你们实验的服务器的话,那就乖乖去找亲爱的师兄!哈哈哈哈哈哈哈哈!

    文末碎碎念

    那今天的分享就到这里啦!我们下期再见哟!

    最后顺便给自己推荐一下嘿嘿嘿!

    如果我的分享对你有用的话,欢迎关注点赞在看转发分享阿巴阿巴阿巴阿巴巴巴!这可是我的第一原动力!

    蟹蟹你们的喜欢和支持!!!

    如果小伙伴们有需求的话,可以加入我们的交流群:一定要知道 | 永久免费的生信交流群终于来啦!!在这里,你可以稍有克制地畅所欲言!

    超级建议大家在入群前或入群后可以看一下这个:干货满满 | 给生信小白的入门小建议 | 掏心掏肺版!绝对干货满满!让你不虚此看!

    如果有需要个性化定制分析服务的小伙伴,可以看看这里:你要的个性化生信分析服务今天正式开启啦!定制你的专属解决方案!全程1v1答疑!!绝对包你满意!

    入群链接后续可能会不定期更新,主要是因为群满换码或是其他原因,如果小伙伴点开它之后发现,咦,怎么失效啦!不要慌!咱们辛苦一下动动小手去主页的要咨询那里,点击进交流群即可入群!

  • 相关阅读:
    2023 海外工具站 2 月复盘
    服务器推送数据之websocket、socket.io及实现简易聊天系统
    Redis集群搭建
    Java 设计模式实战系列—工厂模式
    php将word中的omath转成mathml
    【教程】fastjson升级,spring boot设置fastjson2做序列化反序列化
    Go 程序太大了,能要个延迟初始化不?
    Linux内存管理:memblock
    【C++笔记】多态的原理、单继承和多继承关系的虚函数表、 override 和 final、抽象类、重载、覆盖(重写)、隐藏(重定义)的对比
    ​复旦大学邱锡鹏组:CNN-NER——极其简单有效的嵌套命名实体识别方法
  • 原文地址:https://blog.csdn.net/weixin_43843918/article/details/137284055