从源代码安装 R 包

Jesse John 2023年1月30日
  1. 使用 install.packages() 函数从源代码安装 R 包
  2. 关于 R 包
  3. 从本地源文件安装 R 包
  4. 从 CRAN 安装旧版本的 R 包
  5. 从源代码安装任何 R 包
  6. 结论
从源代码安装 R 包

R 包以源代码形式创建和分发。但是,某些包包含需要编译的 C、C++ 或 Fortran 代码。

因此,二进制包通常可供 Windows 和 macOS 用户使用和安装。本文将学习如何使用 install.packages() 函数从一个源安装两个包,一个来自本地文件,一个来自 CRAN。

在实践中,从源安装包可能并不顺利。在某些情况下,它可能根本不起作用。

因此,我们将从有关 install.packages() 函数和 R 包的一些一般细节开始。如果我们遇到困难,这些信息可能会对我们有所帮助。

使用 install.packages() 函数从源代码安装 R 包

通常,我们使用带有单个参数的 install.packages() 函数:我们要安装的包的名称,用双引号括起来。例如,install.packages("package_name")

该功能检查操作系统 (OS),安装的 R 版本,并在 CRAN 上安装最新版本的软件包,如果它与我们的操作系统和 R 版本兼容。

对于 Windows 和 macOS 操作系统的用户,如果软件包的最新版本可用,它会安装软件包的二进制版本。对于 Linux 用户,软件包总是从源安装。

我们还可以使用 install.packages() 函数从本地或在线源文件安装包。该函数还有其他参数,其中一些我们将在从源安装时使用。

  1. repos 参数给出了存储库的 URL,例如 CRAN 镜像。
  2. dependencies 参数指定要安装的依赖项的类型。
  3. type 参数指定安装应该来自源代码还是二进制文件。

要从源代码安装,我们需要知道这些参数如何相互依赖。

install.packages() 函数的文档说明如下。

  1. repos 参数可以是 NULL 以从本地文件、目录或 URL 安装....
  2. dependencies 参数是 Not used if repos = NULL``。
  3. 当你从 CRAN 上的源安装旧版本的包时,你可能需要先手动安装它的依赖项

R 安装和管理手册的第 6.3 节指出:install.packages 可以通过将参数 repos 设置为 NULL 从本地 .tar.gz 文件(或此类文件的 URL)安装源包:如果给出的名称是单个 .tar.gz 文件。

两者都暗示 R 在使用源文件进行安装时不会获取和安装依赖项。

关于 R 包

R 内置了非常基本的功能。它的大部分功能来自 R 用户在过去几十年中开发的软件包。

这些软件包可在 CRAN 综合 R 档案网络上获得。

访问 CRAN 网站,单击侧边栏中的 Packages,然后单击 Table of available packages(按日期或名称排序)。显示所有可用软件包的列表。

单击任何包的名称。该软件包的 CRAN 页面打开。

我们将考虑一个流行包的例子,dplyr。在该列表中搜索包名称 dplyr,然后单击链接。

请注意 dplyr 的 CRAN 页面上的以下详细信息。

  1. Depends 显示了这个包可以使用的 R 的最低版本。
  2. Imports 显示 dplyr 依赖的包。如果我们以通常的方式安装它们,dplyr 将让 R 安装它们。
  3. 需要编译显示包源有需要编译的 C、C++ 或 Fortran 代码。
  4. Downloads 下,有四行带有链接。
    1. 包源
    2. Windows 二进制文件
    3. macOS 二进制文件
    4. 旧的源代码

要从源安装包,我们需要了解两个具体细节。

  1. 软件包列在 Imports 下。我们要安装的软件包取决于所有这些。

从源代码安装时,我们首先需要安装所有这些包。这些包中的每一个也可能依赖于其他包。

  1. 源码中是否包含需要编译的代码,我们需要在我们的系统上安装相关的工具。

install.packages() 函数的文档在二进制包部分给出了要求。

另外,请记住,一些软件包仅适用于某些操作系统。此类包在其 CRAN 页面上有对 OS_type 的描述。例如,查看 blatr 包。

从本地源文件安装 R 包

要从本地源文件安装包,我们将使用文件名而不是包名作为 install.packages() 函数的第一个参数。我们还将设置 type = "source"repos = NULL

首先,让我们得到一个源代码形式的 R 包。从 CRAN 下载软件包 aplore3 的源文件。

为什么这个特殊的包?这个包的 CRAN 页面显示它没有导入任何其他包,不需要编译。

因此,我们可以期望从源头进行安装而不会出现故障。

将下载的 .tar.gz 文件放在 R 的工作目录中。然后运行以下命令从源安装包。

示例代码:

# FIRST, DOWNLOAD THE FILE.
# Follow the instructions to download the file.


# Make sure R can find this file.
# Place it in the working directory.
# Or change the working directory to where this file is.


# CHANGE THE FILENAME IN THE FOLLOWING CODE
# to match your downloaded file.
install.packages("aplore3_0.9.tar.gz", type = "source", repos = NULL)

R 将显示 DONE 和括号中的包名称。说明包安装成功。

要使用该包,我们需要使用 library() 函数加载该包。

从 CRAN 安装旧版本的 R 包

如果最新版本的包依赖于比我们拥有的新版本的 R,我们可以通过使用旧版本的 URL 作为 install.packages() 函数的第一个参数从源安装旧版本.

我们可以像上一节一样下载旧的源文件并安装它。但为了演示,我们将使用 URL。

请记住,即使使用 URL,R 也不会获取和安装依赖项。所以我们需要选择一个没有依赖的包或者一个已经安装了所有依赖的包。

我们还需要注意包是否需要编译。如果是,我们的系统必须满足要求。

我们将安装旧版本的 pps 软件包进行演示。这个包不依赖其他包,不需要编译。

我们将从 CRAN 复制 2012 版本源的 URL 并在代码中使用它。

示例代码:

install.packages("https://cran.r-project.org/src/contrib/Archive/pps/pps_0.94.tar.gz", repos = NULL, type = "source")

从源代码安装任何 R 包

软件包和我们的系统(OS、R、其他软件)必须满足前面部分中所述的两个要求,并在此处重复以方便从源安装任何其他软件包。

  1. 该包不依赖其他包(Imports 下没有列出任何内容),或者已经安装了所有依赖项,或者我们可以先安装所有需要的依赖项。
  2. 包不需要编译,或者我们的系统有为此目的所需的工具。

许多包不需要编译,但大多数依赖于其他包。

安装 R 包的参考和帮助

R 项目在 R 安装和管理手册 的第 6.3 节中提供了详细的特定于平台的安装包说明。

install.packages() 函数的文档还提供了特定于平台的详细信息。在 R Studio 中,单击 Help > Search R Help 并在搜索框中输入 install.packages(不带括号)。

或者,在 R 控制台中键入一个问号,后跟函数名称。

R 在包安装期间的错误消息经常提到由于安装失败而没有满足确切的要求。

在更基本的层面上,我们必须确保文件名输入正确(包括大小写),函数的语法正确,并且 R 可以找到源包。

结论

R 的 install.packages() 函数在使用软件包名称从 CRAN 安装最新版本的软件包时做了很多工作。CRAN 为 Windows 和 macOS 用户编译了大多数软件包的版本也有帮助。

当使用相同的函数从源文件安装包时,我们必须首先安装依赖项并确保我们的系统可以编译 C、C++ 或 Fortran 代码。

作者: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.