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

时间:2018-11-15 17:25:34

标签: r install.packages rtools

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

$scope.fileSelected = function (file) {
        $.ajax({
            url: 'Files_Uploaded/' + file.name,
            type: 'HEAD',
            error: function () {
                //file does not exist
                existsError.style.display = 'none';
                saveSubmitButton.removeAttribute("disabled");
                saveButton.removeAttribute("disabled");
                uploadFile(file); window.location.host
            },
            success: function () {
                //file exists
                existsError.style.display = 'block';
            }
        });
    };

这使我更进一步。但是然后我需要再包含一个指向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"))

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

1 个答案:

答案 0 :(得分:0)

这可能是一个非常令人困惑的情况,因为 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

或在 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'"))

使用 .Renviron

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

LIB_DIR="/my/lib/dir1 -L/my/lib/dir2"
INCLUDE_DIR="/my/include/dir2 -I/my/include/dir2"

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