Debian R 软件包
一般信息
基本 R 系统的包 已成为 Debian 发行版的一部分 自 1997 年以来,感谢 Douglas Bates,并且自 2001 年以来一直由 Dirk Eddelbuettel 勤奋维护。R 以及许多附加包(来自 CRAN 和其他存储库)可通过常规的 Debian 发行版机制获得。因此,运行
apt search "^r-.*" | sort
在 shell 中应该可以让你开始使用可用包的列表。在以下内容中,需要对系统区域进行写入访问的命令前面都加上了 sudo
,假设你没有 root 权限。
Debian sid(不稳定)和实验版
最新稳定版本的 R 和许多 来自 CRAN 的 R 包 以及 Bioconductor 项目 通常在 官方 Debian sid 存储库 中可用。在发布新版本之前的所谓冻结期,最新版本的 R 和其中一些扩展包可能只在 实验版 中可用。
安装
在 /etc/apt/sources.list
中添加适当的条目(有关除 sid/unstable 或 experimental 之外的 Debian 分支,请参见下文),可以使用类似以下命令序列安装最新的 R 版本,包括推荐的包
sudo apt update
sudo apt install r-base r-base-dev
如果你收到有关缺少公钥的警告,则可能是你启用了下面进一步描述的存储库之一。请参考 关于安全 apt 的部分,以获取用于安全检索包的密钥。
只有当你想要自己编译 R 包或其他依赖于 R 的软件时,才需要 r-base-dev
(参见下面关于管理和维护的部分)。请注意,你可能还需要安装构建依赖项(通常是包含头文件的 -dev 包)。列表 r-sig-debian 是一个很好的地方,如果你遇到问题,可以在这里提问。
管理和维护
r-base
和 r-recommended
中包含的 R 包安装到目录 /usr/lib/R/library
中。其他作为预编译的 Debian 包 r-cran-*
和 r-bioc-*
可用的 R 包安装到 /usr/lib/R/site-library
中。
这些可以使用通常的 Debian 包维护工具(如 apt 或 aptitude)进行更新。
命令
apt rdepends r-base-core
显示所有依赖于r-base-core
的软件包。这包括来自 CRAN 和其他存储库的大量贡献软件包。
如果您想安装没有作为 Debian 软件包提供的 R 软件包,或者想使用更新的版本,您需要从源代码构建它们,这需要开发软件包r-base-dev
,可以通过以下命令安装:
sudo apt install r-base-dev
这将拉取编译 R 软件包的基本要求。然后,本地用户/管理员可以从 CRAN 源代码包中安装 R 软件包,通常从 R 内部使用
install.packages()
函数或使用
R CMD INSTALL
从 shell 中。如果您在/usr/local/lib/R/site-library/
中具有适当的写入权限,并且您没有手动设置R_LIBS_USER
,它们将被安装在那里。否则,系统会询问您是否应该在您的主目录中创建一个目录来存放这些软件包。可以使用以下命令对这些本地编译的软件包进行例行更新:
update.packages(.libPaths()[1])
这将更新您库路径第一部分中的软件包。您可以使用 R 命令查看此路径的组成部分:
.libPaths()
如果您想更新通过 Debian 软件包管理系统安装的 R 软件包,这些软件包安装在/usr/lib/
下的某个位置,我建议您使用 Debian 不稳定版本中的源代码包以 Debian 的方式进行更新。
R 包的路径
为了查找软件包,R 会查看变量R_LIBS_USER
和R_LIBS_SITE
。在 Debian 和 Ubuntu 上,R_LIBS_USER
在/etc/R/Renviron
中被设置为
R_LIBS_USER=${R_LIBS_USER-'~/R/$platform-library/4.0'}
其中$platform
类似于'x86_64-pc-linux-gnu'
,具体取决于安装的 R 版本。您可以在~/.Renviron
中覆盖此设置。R_LIBS_SITE
在/etc/R/Renviron
中被设置为
R_LIBS_SITE=${R_LIBS_SITE-'/usr/local/lib/R/site-library:/usr/lib/R/site-library:/usr/lib/R/library'}
这意味着,如果您同时安装了两个版本的软件包,从 R 内部安装的软件包将优先于通过 Debian 软件包管理系统安装的软件包。
CRAN 上的回溯包
由于 R 及其相关软件包目前不属于官方 Debian backports 仓库(例如 `buster-backports`)(如果您想更改此情况,请联系 r-sig-debian),因此已发布或冻结的 Debian 版本中的 R 版本会过时。因此,这里为这些 Debian 版本提供了一些 R 相关软件包的更新。
支持的包
R 核心团队推荐的软件包(`r-recommended`)在 CRAN 上发布 R 的每个新版本时都会在 Debian 仓库中更新(至少对于主要架构 amd64 和 i386 而言)。这些软件包是
r-cran-boot
r-cran-class
r-cran-cluster
r-cran-codetools
r-cran-foreign
r-cran-kernsmooth
r-cran-lattice
r-cran-mass
r-cran-matrix
r-cran-mgcv
r-cran-nlme
r-cran-nnet
r-cran-rpart
r-cran-spatial
r-cran-survival
以下软件包的 backports 也以相同的方式提供并保持最新
littler
rpy2
rkward
如果您想在这里看到更多软件包,欢迎提供帮助。
安全 apt
用于签署 CRAN 上当前 Debian 软件包仓库的密钥 ID 为 `0xB8F25A8A73EACF41`,密钥指纹为 `95C0FAF38DB3CCAD0C080A7BDC78B2DDEABC47B7`,用户 ID 为 `Johannes Ranke <johannes.ranke@jrwb.de>`。
您可以从 Ubuntu 项目运行的密钥服务器获取密钥
gpg --keyserver keyserver.ubuntu.com \
--recv-key '95C0FAF38DB3CCAD0C080A7BDC78B2DDEABC47B7'
如果您位于阻止端口 11371 的防火墙后面,可以通过在上述命令中添加 `--keyserver-options http-proxy=<PROXY>` 来指定代理服务器。
然后您将其导出并写入 apt 将信任它的目录(覆盖任何已存在的同名文件,如果存在)。
gpg --armor --export '95C0FAF38DB3CCAD0C080A7BDC78B2DDEABC47B7' | \
sudo tee /etc/apt/trusted.gpg.d/cran_debian_key.asc
支持的分支
Debian bookworm
Debian bookworm 已于 2023 年 6 月 10 日发布。如果您使用 bookworm 并想使用 R 4.3.3,您可以使用以下仓库。
deb http://cloud.r-project.org/bin/linux/debian bookworm-cran40/
请注意,R 4.3.x 已提升了图形 API,因此 svglite、tikzDevice、rgl、rvg、ggplot2 或 vdiffr(嵌入 svglite)等图形软件包需要重新安装。这也影响了 rkward 提供的图形设备。如果您没有这样做,您将收到错误消息
Graphics API version mismatch
Debian bullseye(稳定版)
Debian bullseye 已发布 R 4.0.4。如果您想在 bullseye 上升级到 R 4.3.3,您可以使用以下仓库。
deb http://cloud.r-project.org/bin/linux/debian bullseye-cran40/
请注意,R 4.1.x、R 4.2.x 和 R 4.3.x 已提升了图形 API,因此 svglite、tikzDevice、rgl、rvg、ggplot2 或 vdiffr(嵌入 svglite)等图形软件包需要重新安装。这也影响了 rkward 提供的图形设备。如果您没有这样做,您将收到错误消息
Graphics API version mismatch
Debian buster(旧稳定版)
要将 R 4.3.3 的 backport 添加到 buster,请添加
deb http://cloud.r-project.org/bin/linux/debian buster-cran40/
到您计算机上的 ` /etc/apt/sources.list` 文件中。
由于 API 更改(R 4.0.x 和 4.1.0 提供 r-api-4),安装 R 4.x.x 将删除所有依赖于 r-api-35 的 Debian 软件包,除了这里提供的软件包。此外,您需要更新从 CRAN 或 Bioconductor 直接获得的 R 软件包。
请参考上面关于图形 API 版本升级的说明。
此外,如果您在更改为 r-api-4 之前安装了大量本地软件包,使用例如以下给出的 R 命令更新它们可能需要一些时间,这还取决于您并行运行的 CPU 线程数量。
update.packages(lib.loc="/usr/local/lib/R/site-library", ask = FALSE,
checkBuilt = TRUE, Ncpus = 16)
在我的情况下,使用上面命令中指定的 16 个并行线程,下载大约花了八分钟,第一轮安装(CPU 负载很高)又花了 12 分钟。然后它停止提示我需要手动重新安装 testthat,我使用 install.packages()
进行了操作。这可能是由于循环依赖,正如 Dirk 在他的 博客 中的升级报告中指出的那样。在我完成操作后,我再次运行了更新命令,它又花了六分钟才成功完成。
如果您也安装了 Bioconductor 软件包,则需要使用 此处 列出的命令切换到当前版本。
R 3.6.3 的反向移植到 buster 也可用,它不需要重新安装扩展软件包。
deb http://cloud.r-project.org/bin/linux/debian buster-cran35/
Debian stretch(旧旧稳定版)
要将 R 3.6.3 反向移植到 stretch,请添加
deb http://cloud.r-project.org/bin/linux/debian stretch-cran35/
到您计算机上的 ` /etc/apt/sources.list` 文件中。
请注意,来自 Debian stretch 发行版的 R 软件包与 R 3.5.x 不兼容,因为它提供 r-api-3.5,而 stretch 软件包依赖于 r-api-3。
此外,如果本地软件包在更新到 R 3.5.0 之前安装,并且使用了编译代码,则它们将无法正常工作。
您在本地编译的 R 软件包可以使用 R 中的以下命令更新
update.packages(lib.loc="/usr/local/lib/R/site-library", ask=FALSE, checkBuilt=TRUE)
还有一个包含 R 3.4.4 的旧存储库,其中仍然包含 arm64 和 armhf 二进制文件。
deb http://cloud.r-project.org/bin/linux/debian stretch-cran34/
支持的平台
所有 Debian 版本都有 i386 和 amd64 二进制文件。从 R 3.1.0 开始,R 在 arm 和 armel 二进制文件上完全可用,这里提供了 jessie 和 wheezy 的二进制文件,直到 R 3.4.2。从 R 3.4.2 到 R 3.4.4,为 Debian stretch 提供了 armhf 和 arm64 的二进制文件(arm64 上的 R 3.4.3 除外,请参阅 此错误)。
对于其他架构和版本,您可以使用以下存储库中的源代码包
deb-src cloud.r-project.org/bin/linux/debian bookworm-cran40/
deb-src cloud.r-project.org/bin/linux/debian bullseye-cran40/
deb-src cloud.r-project.org/bin/linux/debian buster-cran40/
deb-src cloud.r-project.org/bin/linux/debian buster-cran35/
deb-src cloud.r-project.org/bin/linux/debian stretch-cran35/
deb-src cloud.r-project.org/bin/linux/debian jessie-cran35/
来编译 Debian 二进制包。
报告问题
报告这些软件包问题或询问特定于 Debian 的 R 问题的最佳位置是 r-sig-debian 邮件列表。请参阅
https://stat.ethz.ch/mailman/listinfo/r-sig-debian
以获取更多信息。
为 CRAN 回溯 Debian 包
任何有兴趣构建 Debian 软件包的人(例如,针对不受支持的版本、其他架构或旧的 R 版本)都可以查看当前维护者使用的构建脚本。这些脚本可以在以下位置查看
http://cgit.jrwb.de/r-backports
或从 git 存储库克隆
git clone https://cgit.jrwb.de/r-backports
这些脚本包含一些小的更改,这些更改是为在支持的版本上编译原始 Debian 包所需的。
从 svn 安装 R-devel 或发布分支
以下说明试图合并 2015 年 3 月底在 r-sig-debian 线程中给出的提示,以及在 https://developer.r-project.org/SVNtips.html 中给出的技巧。我没有经常使用它,我假设您在 Unix 系统上构建软件方面有一些经验。不提供任何保证,您的里程可能会有所不同。
首先,确保您的 /etc/apt/sources/list
中有一个源代码库,例如
deb-src http://deb.debian.org/debian/ unstable main
为了更容易获得构建依赖项。然后更新您的可用包列表并获取构建依赖项
sudo apt update
sudo apt build-dep r-base
安装构建依赖项。以下命令不需要 root 权限,并且更安全地以普通用户身份运行。
我将所有由 Subversion 管理的源代码保存在 ~/svn
下,因此我执行
export RTOP=~/svn/R
请根据您的需要进行调整。基本 R 系统源代码的位置由环境变量方便地定义为
export REPOS=https://svn.r-project.org/R
R-devel
我们切换到我们的 RTOP 目录并检出 R-devel 的最新版本
cd $RTOP
svn co $REPOS/trunk r-devel/source
mkdir $RTOP/r-devel/build
第二次,我们只需要
cd $RTOP/r-devel/source
svn up
然后我们需要获取推荐包的源代码
cd $RTOP/r-devel/source/tools
./rsync-recommended
我们在上面创建的单独目录中构建,以避免污染源代码
cd $RTOP/r-devel/build
../source/configure
您可能希望使用许多配置选项,例如,您可能希望使用 --with-blas="-lopenblas"
来获得更高效的线性代数运算。这取决于 libopenblas-dev
是否已安装,默认情况下,它将在 Debian bullseye 上拉取 libopenblas-pthread-dev
。
我们在这里不使用 install 目标,因此我们不设置 --prefix
。这是为了避免与已发布版本的 R 的 Debian 包冲突。下一步构建源代码。
make
make check
make pdf
make info
当然,执行检查以及制作 pdf 和 info 文档是可选的。然后我们使用链接来使 R-devel 和 Rscript-devel 可用(显然假设对 /usr/local/bin 有写权限)。
cd /usr/local/bin
ln -s /$RTOP/r-devel/build/bin/R R-devel
ln -s /$RTOP/r-devel/build/bin/Rscript Rscript-devel
这将使 R-devel
和 Rscript-devel
命令可用。请注意,.libPaths()
上的唯一条目是 $RTOP/r-devel/build/library
,因此这是安装包的位置。
R-patched
在发布版本 R-x.y.0 后,所谓的发布分支用于引入符合 开发指南 的更改。
我们可以使用以下方案构建此类分支(又名 R-patched),该方案改编自为 R-devel 给出的过程,但没有重复所有注释。
截至 2023 年 11 月,发布分支可以定义为
export RPATCHED=branches/R-4-3-branch
然后可以构建 R-patched 并使其可用
cd $RTOP
svn co $REPOS/$RPATCHED r-patched/source
mkdir $RTOP/r-patched/build
cd $RTOP/r-patched/source/tools
./rsync-recommended
同样,我们在上面创建的单独目录中构建,以避免污染源代码
cd $RTOP/r-patched/build
../source/configure
make
make check
make pdf
make info
然后,以特权用户身份
cd /usr/local/bin
ln -s /$RTOP/r-patched/build/bin/R R-patched
ln -s /$RTOP/r-patched/build/bin/Rscript Rscript-patched
可以通过从存储库更新源代码、同步推荐软件包的最新版本并重新构建来更新构建。
Debian R 策略
关于“Debian R 策略”的第一个公开草案的 RFC 已于 2003 年发布到 debian-devel。
贡献
本文件由 Johannes Ranke johannes.ranke@jrwb.de 维护。Debian R 包由 Dirk Eddelbuettel 维护。CRAN 上提供的反向移植包由 Johannes Ranke 提供。感谢 Mathieu Basille 在 2015 年 3 月对 README 进行重构。