当使用R的devtools库函数“install”时,如何保留源文件?

5

我正在尝试从源代码构建一个R包(DESeq2),以便我可以对其进行调试。我已经安装了所需的所有依赖项,并按照Hillary Parker的说明创建R包。我正在使用R-3.4.2在CentOS 6.6上运行此程序。

我运行以下命令:

library("devtools")
install("DESeq2", keep_source=TRUE)

它将其安装在我所有其他R库的目录中。当我查看已安装的DESeq2库时,它缺少所有DESeq2/R/*.RDESeq2/src/*.cpp文件。
问题:这些文件在哪里,为什么没有被安装?这似乎不是预期的行为。

我认为keep.source是一个指令,用于在加载代码时包含源代码,而不是保留/library/..中的特定文件。我也不确定它如何与Rcpp代码配合使用。我还认为您可能需要查看传递给type的内容,因为它取决于操作系统,而您没有告诉我们这一点。 - IRTFM
已添加所需信息。在?install中,它说:“keep_source: 如果为'TRUE',将保留已安装软件包的srcrefs。这对于调试非常有用(特别是在RStudio内部)。它默认为选项'“keep.source.pkgs”'。”我猜想我假设'srcrefs'将包括源代码?也许不是? - irritable_phd_syndrome
“被传递到type是什么意思?type不是install的参数。” - irritable_phd_syndrome
我认为它会传递给install.packages。也许不是吗? - IRTFM
1
keep_source=TRUE 将会简单地将 --with-keep.source 传递给 rcmd。根据文档,“默认情况下,软件包不会保留源代码格式”,此选项启用了该功能。 - miken32
1个回答

6
R使用二进制数据库格式来打包对象到类似数据库的文件格式中,以提高效率(延迟加载)。这些数据库文件(*.rdb和*.rdx)存储在软件包安装路径的R子文件夹中(参见?lazyLoad)。
即使您正在查找正确的位置以查找已安装的软件包(使用R中的.libPaths()查找安装文件夹),并且您已经使用源代码安装了软件包(就像您所做的或通过install.packages("a_CRAN_package", INSTALL_opts = "--with-keep.source")),您也无法在R文件夹中找到R文件。
您可以通过从软件包中选择一个函数名称并将其打印到控制台上来验证源代码是否可用。如果您可以看到源代码(带注释),则软件包源(R文件)可用: print(DeSeq2::any_function)
为了使源代码可以用于调试和堆栈跟踪,您可以在您的.Rprofile文件中或通过环境变量设置选项keep.source.pkgs = TRUE(参见?options):

keep.source.pkgs:

与keep.source一样,仅在安装软件包时使用。默认为FALSE,除非环境变量R_KEEP_PKG_SOURCE设置为yes。

注意:此时源代码仅适用于新安装和更新的软件包(不适用于已安装的软件包!)。
有关更多详细信息,请参见:https://yetanothermathprogrammingconsultant.blogspot.de/2016/02/r-lazy-load-db-files.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接