如何安装“R-essentials”中没有的 R 包?
- 2025-02-25 09:07:00
- admin 原创
- 65
问题描述:
我使用现成的 Anaconda 安装来使用 Python。现在我了解到,也可以在此安装中“包含”R 世界,并在Jupyter/Ipython 笔记本中使用 IR 内核。
我找到了安装许多著名 R 包的命令:conda install -cr r-essentials
我的初学者问题:
如何安装R-essential包中未包含的 R 包?例如,CRAN 上提供的 R 包。“pip”仅适用于 PyPI Python 包,不是吗?
解决方案 1:
现在我找到了文档:
这是解释如何生成仅在 CRAN 存储库中可用的 R 包的文档:
https://www.continuum.io/content/conda-data-science
转到“构建 conda R 包”部分。
(提示:只要 R 包在 anaconda.org 下可用,就可以使用此资源。请参阅此处:https://www.continuum.io/blog/developer/jupyter-and-conda-r)
alistaire的回答是添加 R 包的另一种可能性:
install.packages
如果您通过常规方式(从 CRAN 镜像)或(从 GitHub)从 R 内部安装软件包devtools::install_github
,它们可以正常工作。@alistaire
如何操作:
打开你的(独立)R 安装,然后运行以下命令:
install.packages("png", "/home/user/anaconda3/lib/R/library")
将新包添加到 Jupyter 使用的正确 R 库中,否则该包将安装在.libPaths()中提到的 /home/user/R/i686-pc-linux-gnu-library/3.2/png/libs 中。
解决方案 2:
在 Jupyter 上安装 R-essentials 以外的其他 R 包
install.packages('readr', repos='http://cran.us.r-project.org')
一个问题是特定的存储库是US.R-Project
(如下所示)。我尝试了其他存储库,但没有用。
readr
NB:用任何想要安装的包名称替换。
解决方案 3:
这是以 conda 为中心的答案。它基于 Frank 的答案和 continuum 网站:https://www.continuum.io/content/conda-data-science,但更详细一些。
一些 r-essentials 中没有的软件包仍然可以在 conda 频道上找到,在这种情况下,很简单:
conda config --add channels r
conda install r-readxl
如果需要构建包并使用 conda 安装:
conda skeleton cran r-xgboost
conda build r-xgboost
conda install --use-local r-xgboost
continuum 网站中没有最后一行,因为他们假设它会先发布到 anaconda 存储库。没有它,envs/ 目录中将不会放入任何内容,并且命令行 R 或 Jupyter 也无法访问该包。
在 Mac 上,我发现安装 Clang 编译器对于包构建非常重要:
conda install clangxx_oxs-64
解决方案 4:
我找到了一个简单的解决方法。我猜你有一个 RStudio IDE 来处理你的 R。使用 RStudio 来做这件事很奇怪,但我尝试直接从终端中的 R 开始,但没有成功。因此,在 RStudio 控制台中,只需像往常一样将路径添加到你的 anaconda 目录(在 OSX 中为“/Users/yourusernamehere/anaconda/lib/R/library”)
例如,
install.packages('package','/Users/yourusernamehere/anaconda/lib/R/library')
我为发表这样一个不太好的答案感到羞愧,但这是唯一对我有用的答案。
解决方案 5:
要从命令行安装 CRAN 包:
R --slave -e "install.packages('missing-package', repos='http://cran.us.r-project.org')"
解决方案 6:
披露:虽然我第一次回答这个问题时情况并非如此,但我现在是Conda Forge R 团队的一员。但是,这是志愿工作 - 我没有得到任何报酬,也不知道你是否遵循这个答案中的建议。
使用 Conda Forge
从最初的问题提出五年后,我断言,一个更现代的解决方案就是:使用Conda Forge。 Conda Forge 频道不仅提供更广泛的 CRAN 覆盖范围,而且在将缺失的 CRAN 包添加到频道时,还具有简单的程序和短的周转时间(通常在 24 小时内)。
从 Conda Forge 开始
我建议使用 Conda Forge 作为完整堆栈,并为您需要的每个 R 版本使用专用环境。
conda create -n r41 -c conda-forge r-base=4.1 r-irkernel ...
其中...
是您需要的任何附加包(例如r-tidyverse
)。该r-irkernel
包是可选的,但包含在此处,因为 OP 提到在 Jupyter 中使用 R。
如果您的环境也安装了 Jupyter(应该在单独的环境中)nb_conda_kernels
,那么该环境将自动被 Jupyter 发现。
从 Conda Forge 安装
通常,CRAN 上的所有 R 包r-
在 Conda Forge 上的包名前都会有一个前缀,并且包名会转换为小写。因此,如果您感兴趣的包是PkgName
,请先尝试
conda install -n r41 -c conda-forge r-pkgname
如果该包不可用,则继续添加或请求它。
使用 Conda R Skeleton Helper 提交 CRAN 包
有一个很有用的脚本集合,名为conda_r_skeleton_helper ,用于为CRAN包创建新的 Conda Forge 配方。README 中有明确的说明。
概括来说,
克隆
conda_r_skeleton_helper
存储库编辑
packages.txt
文件以包含r-pkgname
运行脚本来生成配方
分叉并克隆
conda-forge/staged-recipes
将新食谱文件夹复制到
stage-recipes/recipes
文件夹提交更改,推送到 fork,然后将 Pull 请求提交回 Conda Forge
这可能需要大约 15 分钟的工作时间。提交后,大多数软件包需要不到 24 小时才能被接受、进料并部署到 Conda Forge 渠道。一旦原料启动并运行,Conda Forge 基础设施就会使用机器人自动检测版本更新、生成新的拉取请求,甚至自动合并成功构建的拉取请求。也就是说,维护人员的工作量非常小,如果出现问题,团队可以提供帮助。
自动化
就我个人而言,我已经将所有这些脚本编写好了(请参阅脚本)。我在 fork 的本地副本的根目录中保存了这些脚本的副本staged-recipes
。在 shell 中,我运行:
sh new-cran-pkg.sh r-foo
并且它:
将我的
staged-recipes
主分支同步到上游(conda-forge
)。为 创建新的分支
r-foo
。conda_r_skeleton_helper
运行该包的最新副本(此处r-foo
)。添加、提交并将菜谱推送到我的 fork。
然后我只需访问 GitHub 来设置 Pull 请求。只需不到一分钟。
求人
如果您在提交菜谱或更新现有菜谱时遇到问题,请在 GitHub 问题或拉取请求 ( @mfansler
) 中联系我。
提交包裹请求
对于不熟悉创建和维护 Conda Forge 构建的用户,可以staged-recipes
通过提交新问题在 Conda Forge 的存储库中请求软件包。有一个软件包请求模板,其中包含一些需要填写的信息字段。
解决方案 7:
将它添加到这里,以便其他已经在使用 Python 的 Jupyter 笔记本并有兴趣将其与 R 一起使用的初学者:可以通过终端使用与安装基本软件包相同的命令安装 Anaconda 可用的附加软件包。
安装 r-essentials
conda install -c r r-essentials
安装微基准(用于精确测量和比较 R 表达式执行时间的基础架构)
conda install -c r r-microbenchmark
解决方案 8:
我在尝试使用 conda 和 r-essentials 从 github 安装软件包时遇到了问题install_github("user/package")
。错误很多,且不具描述性。
能够使用以下步骤解决问题:
下载并解压到本地
激活正确的 conda 环境(如果需要)
从命令行运行 R
library(devtools)
install('/path/to/unzipped-package')
由于缺少依赖项,命令失败,但现在我知道缺少了什么!
运行
install.packages('missing-package', repos='http://cran.us.r-project.org')
所有依赖项再次运行
install('/path/to/unzipped-package')
。现在它应该可以工作了!
解决方案 9:
使用conda安装rpy2并在 Jupyter 笔记本中添加以下行。
%load_ext rpy2.ipython
在下一个块中,您可以通过指定 %R 简单地运行任何 r 代码
以下是我最喜欢的安装和/或加载 r 包的方法
%R if (!require("pacman")) install.packages("pacman")
%R pacman::p_load(dplyr, data.table, package3, package4)
如果包不在你的库中, p_load 参数将安装 + 加载该包,否则它将简单地加载它。
解决方案 10:
有人提出了一种不太优雅的解决方法,但实际上只要它能正常工作就没关系。
install.packages('package','/Users/yourusernamehere/anaconda/lib/R/library')
我花了几乎一整个上午寻找这个问题的答案。我能够在 RStudio 上安装库,但不能在 Jupyter Notebook 上安装(它们有不同版本的 R)。上述解决方案“几乎”有效,只是我发现 Jupyter Notebook 试图安装在不同的目录中,它会报告哪个目录。所以我只改变了这一点,它就成功了……感谢 Dninhos
解决方案 11:
对我有用的是install.packages("package_name", type="binary")
。其他答案均无效。
解决方案 12:
对我来说,这里的注释有效,这意味着使用conda install -c r r-<package_name>
。例如,我想安装httr2
不是 r-essential 的包。起初我尝试这样做:
conda install httr2
Channels:
- defaults
Platform: linux-64
Collecting package metadata (repodata.json): done
Solving environment: failed
PackagesNotFoundError: The following packages are not available from current channels:
- httr2
Current channels:
- defaults
To search for alternate channels that may provide the conda package you're
looking for, navigate to
https://anaconda.org
and use the search bar at the top of the page.
这不起作用所以我使用了我在顶部提到的命令,conda install -c r r-httr2
如下所示:
conda install -c r r-httr2
Channels:
- r
- defaults
Platform: linux-64
Collecting package metadata (repodata.json): done
Solving environment: done
## Package Plan ##
environment location: /opt/miniconda3/envs/r_env
added / updated specs:
- r-httr2
The following packages will be downloaded:
package | build
---------------------------|-----------------
r-httr2-0.2.3 | r43h6115d3f_0 371 KB
------------------------------------------------------------
Total: 371 KB
The following NEW packages will be INSTALLED:
r-httr2 pkgs/r/noarch::r-httr2-0.2.3-r43h6115d3f_0
Proceed ([y]/n)? y
Downloading and Extracting Packages:
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
这非常有效!
扫码咨询,免费领取项目管理大礼包!