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

news2024/11/25 12:50:36

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

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

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

经常会有小伙伴们在群里提到一些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/")

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

if(!require("BiocManager"))
  install.packages("BiocManager")

那为啥要这么写呢?

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)
    
  2. require()函数

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

    示例:

    if(!require(ggplot2)) {
      install.packages("ggplot2")
      library(ggplot2)
    }
    

所以呀,一般来说,如果你确定你的代码需要某个特定的包来运行,而且这个包不应该缺失,那么使用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

报错显示:哎呀呀,这位小姐姐/小哥哥,真是不好意思呐,非常抱歉哟!你要安装的这个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")

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

BiocManager::install("包的名称")
BiocManager::install("limma")

是不是非常简单粗暴!

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")

上述示例代码表示使用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")

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")

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

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

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

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

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

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

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

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

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

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

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

或许conda也能助你一臂之力

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

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

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

conda install -c bioconda “包的名称”

建议包名+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答疑!!绝对包你满意!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1563588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

英伟达智算先锋训练,冲刺智算时代实战

随着数字经济的深入发展,智能算力作为关键生产力,其规模在2022年已达到268.0 EFLOPS,并预计到2028年将增长至2769 EFLOPS,显示出强劲的发展势头。在2024年政府工作报告中,也首次提出了“人工智能”行动,强调…

Golang 内存管理和垃圾回收底层原理(二)

一、这篇文章我们来聊聊Golang内存管理和垃圾回收,主要注重基本底层原理讲解,进一步实战待后续文章 垃圾回收,无论是Java 还是 Golang,基本的逻辑都是基于 标记-清理 的, 标记是指标记可能需要回收的对象&#xff0c…

Java设计之道:色即是空,空即是色

0.引子 我们的这个世界上,存在这么一种东西: 第一:它不占据任何3D之体积,即它没有Volume第二:它也不占据任何2D之面积,即它没有Area第三:它也不占据任何1D之长度,即它没有Length 总…

【容易不简单】love 2d Lua 俄罗斯方块超详细教程

源码已经更新在CSDN的码库里: git clone https://gitcode.com/funsion/love2d-game.git 一直在找Lua 能快速便捷实现图形界面的软件,找了一堆,终于发现love2d是小而美的原生lua图形界面实现的方式。 并参考相关教程做了一个更详细的&#x…

【深耕 Python】Data Science with Python 数据科学(7)书352页练习题

写在前面 关于数据科学环境的建立,可以参考我的博客: 【深耕 Python】Data Science with Python 数据科学(1)环境搭建 往期数据科学博文: 【深耕 Python】Data Science with Python 数据科学(2&#xf…

苹果开发者账号注册步骤中的常见疑问解答与技巧分享

转载:注册苹果开发者账号的方法 在2020年以前,注册苹果开发者账号后,就可以生成证书。 但2020年后,因为注册苹果开发者账号需要使用Apple Developer app注册开发者账号,所以需要缴费才能创建ios证书了。 所以新政策出…

算法系列--递归,回溯,剪枝的综合应用(3)

💕"对相爱的人来说,对方的心意,才是最好的房子。"💕 作者:Lvzi 文章主要内容:算法系列–递归,回溯,剪枝的综合应用(3) 大家好,今天为大家带来的是算法系列--递归,回溯,剪枝的综合应用(3),带来几…

深入浅出:大模型产业链的全景解码

大模型产业仿佛如同一场盛宴,虽然AGI的菜肴还没有上桌,但掩盖不住的香味已经让所有人垂涎,都希望自己将来在餐桌上能够“吃饱饱”。这也是一场没有邀请函的宴席,从尚在学校的学生到公司的决策层,都能在生成式AI的相关研…

简单而复杂的Python

Python是一种简单&复杂的编程语言。简单的时候可以到极致: print(hello world!)另一方面,Python 也具有许多复杂的语法特性,例如面向对象编程、装饰器、迭代器、生成器等等。这些特性使得 Python 适用于各种不同的编程任务和项目。 当我…

【JavaWeb】Day31.SpringBootWeb请求响应——分层解耦(二)

3.IOC&DI 3.1 IOC&DI入门 完成Controller层、Service层、Dao层的代码解耦 思路: 1. 删除Controller层、Service层中new对象的代码 2. Service层及Dao层的实现类,交给IOC容器管理 3. 为Controller及Service注入运行时依赖的对象 Controller程序…

HarmonyOS 应用开发之同步任务开发指导 (TaskPool和Worker)

同步任务是指在多个线程之间协调执行的任务,其目的是确保多个任务按照一定的顺序和规则执行,例如使用锁来防止数据竞争。 同步任务的实现需要考虑多个线程之间的协作和同步,以确保数据的正确性和程序的正确执行。 由于TaskPool偏向于单个独…

【Java代码审计】SSTI模板注入篇

【Java代码审计】SSTI模板注入篇 1.概述2.Velocity 模板引擎3.Thymeleaf 模板注入复现普通url作为视图 4.SSTI 漏洞修复白名单控制跳转模版设置response参数 1.概述 模板引擎支持使用静态模板文件,在运行时用 HTML 页面中的实际值替换变量/占位符,从而让…

蓝桥杯刷题第六天(昨天忘记发了)

今天想从不一样的角度来解题:从时间紧张暴力求解到思路阔达直接通过所有案例 暴力方法: 思路第一眼看到这个问题我就想到了第一个思路就是先用两个数组一个存石子数一个存颜色状态,每次遍历一遍看看有没有相邻石子颜色一样且为和最小的。 im…

如何整合当地商家资源?如何进行二次变现?

随着市场竞争的日益激烈,商家们纷纷寻求创新的营销方式来扩大市场份额、提升品牌影响力。异业联盟作为一种新型的商业合作模式,正逐渐受到业界的关注和认可。本文将探讨异业联盟的可行性,并分析其是否可以通过小程序形式实现更广泛的应用。 一…

zip解压异常java.lang.IllegalArgumentException: MALFORMED处理

使用hutool解压zip包时出错: //压缩包解压到固定目录 ZipUtil.unzip(tempZipFile,dir);在解压文件的时候报错,原因是压缩文件中有中文;导致错误,解决办法是设置编码: ZipFile tempZipFile new ZipFile(zipFile, Cha…

h5 笔记1

Internet是InternationalNetwork的缩写,又称“因特网”。它是将全世界数以千计的上网设备通过TCP/IP通信协议连接在一起。Internet上的服务众多,主要的服务有WWW(万维网)、E-Mail(电子邮件)、FTP(FileTransferProtocol,文件传输协议)、Telnet…

Ps:颜色查找

颜色查找 Color Lookup命令通过应用预设的 LUT 来改变图像的色彩和调性,从而为摄影师和设计师提供了一种快速实现复杂色彩调整的方法,广泛应用于颜色分级、视觉风格的统一和创意色彩效果的制作。 Ps菜单:图像/调整/颜色查找 Adjustments/Colo…

微信小程序-文字转语音(播放及暂停)

1、使用微信小程序的同声传译功能 小程序平台-设置-第三方设置-插件管理-新增同声传译插件 小程序app.json文件配置 "plugins": {"WechatSI": {"version": "0.3.5","provider": "wx069ba97219f66d99"}},小程序中…

python生物信息多组学大数据深度挖掘与论文整理技巧技术应用

生物信息广泛涵盖基因组学、蛋白组学、系统生物学、表观遗传、非编码等前沿领域以及药物设 计、基因工程等应用领域。与传统的理论和实验学科不同,生物信息是一门数据科学,这就需要从业 者具备一定数据收集、管理、处理和分析的能力。在海量的组学数据面…

一文搞懂:Java项目线上故障处理和调优的基本方法

一. 调优和故障处理的方向 Java调优通常指的是对Java应用程序进行性能优化和资源管理的过程。调优的方向很多也很广,比如: 内存管理:优化Java应用程序的内存使用,包括减少内存泄漏、合理设置堆大小、优化垃圾收集器的选择和参数…