如何在 R 中 install.packages() 函数的 configure.vars 参数中的 INCLUDE_DIR 下包含更多路径?

kor*_*oll 6 r install.packages rtools

我的 gdtools 包有问题。我想从源代码安装它,但不幸的是我无法在 Linux 机器上安装任何额外的库。我正在做的就是解决这个问题,它是在安装时包含软件包:

install.packages(repos = c("http://localhost.net/cran"), type = "source", pkgs = c('gdtools'), configure.vars = c("INCLUDE_DIR=/extra/gdtools/windows/cairo-1.15.10/include/cairo"))
Run Code Online (Sandbox Code Playgroud)

这让我可以更进一步。但是我需要再包含一个目录,指向 freetype 库:/extra/gdtools/windows/cairo-1.15.10/include/freetype2/freetype

但是当我尝试将其添加到命令时它不起作用。我尝试过很多方法,例如它不起作用:

install.packages(repos = c("http://localhost.net/cran"), type = "source", pkgs = c('gdtools'), configure.vars = c("INCLUDE_DIR=/extra/gdtools/windows/cairo-1.15.10/include/cairo /extra/gdtools/windows/cairo-1.15.10/include/freetype2/freetype"))
Run Code Online (Sandbox Code Playgroud)

有人可以帮我怎么做吗?我也从 R CMD 级别尝试过。任何解决方案对我来说都是可以接受的。

naw*_*ndt 9

这可能是一个非常令人困惑的情况,因为 R 文档没有明确告诉您如何执行此操作。然而,有几个选项可以完成这项工作。正如您将在示例中看到的,诀窍在于如何将字符串组合在一起。要在 INCLUDE_DIR 或 LIB_DIR 中获取多个目录,只需将多个目录嵌入完整双引号字符串中的单引号中即可。但请注意,您不需要将-I-L标志放置在字符串的开头,但必须将它们放置在其他目录之前。这是因为 R 会在解析出 INCLUDE_DIR 和 LIB_DIR 后为您添加它。

对这些方法的一个警告是,每个包都可以自由地实现其他变量以及查找库和标头的方法。虽然 LIB_DIR 和 INCLUDE_DIR 似乎很常用,但可以找到使用其他特定环境变量来代替这些变量的包。包也可能没有前置-I-L。只需了解该包的期望即可。好消息是,即使变量名称等发生变化,这些一般原则仍然适用。

使用配置变量

配置变量可在命令行安装中使用

R CMD INSTALL --configure-vars="LIB_DIR='/my/lib/dir1 -L/my/lib/dir2' INCLUDE_DIR='/my/include/dir1 /my/include/dir2'" /path/to/myPackage
Run Code Online (Sandbox Code Playgroud)

或在R内

install.packages("myPackage", configure.vars=c("LIB_DIR='/my/lib/dir1 -L/my/lib/dir2' INCLUDE_DIR='/my/include/dir1 -I/my/include/dir2'"))
Run Code Online (Sandbox Code Playgroud)

使用.Renviron

您还可以在 .Renviron 文件中设置 R 的环境变量。R 在启动时读取该文件。请参阅R 文档,了解 R 如何处理 .Renviron 以及它期望的位置。您只需在文件中添加所需的变量,R 将在安装包时使用它们。

LIB_DIR="/my/lib/dir1 -L/my/lib/dir2"
INCLUDE_DIR="/my/include/dir2 -I/my/include/dir2"
Run Code Online (Sandbox Code Playgroud)

虽然此选项很方便,但这也意味着这些变量将用于所有包。配置变量方法可能更适合一次性安装或当您需要每个包设置(通过命名向量或列表完成)时。