【问题标题】:R package: use a custom file/directories structure in pkg/R and pkg/src foldersR 包:在 pkg/R 和 pkg/src 文件夹中使用自定义文件/目录结构
【发布时间】:2012-12-20 19:47:11
【问题描述】:

我正在编写一个 R 包,它的大小开始增长,因此非常感谢在文件夹 pkg/R/ 和(尤其是)pkg/src/ 中使用自定义结构。

例如,假设我有两个 A 类型的算法家族,以及 B 类型的一些函数,以及一个主入口点。理想情况下,R/ 或 src/ 文件夹的组织方式如下:

  • A型/
    • 算法1/
      • algo11.ext
      • ...
    • 算法2/
      • algo21.ext
      • ...
  • B型/
    • function1.ext
    • ...
  • main.ext

在 {R,cpp,c,f,...} 中带有“ext”,并且可能有两个具有相同名称的文件。

有可能吗?如果是,我该怎么做?

提前致谢!


[2012-12-31] 编辑:一个想法是编写一些脚本 - 可能在另一个 R 包中 - 以(取消)扁平化用于测试或扩散的结构化包。不过可能有更好的解决方案,所以我会稍等。

【问题讨论】:

  • 你可能会?能够在src/ 中使用自定义 Makefile。你浏览过 R 扩展手册了吗?我认为重组R/ 会更难。
  • 我尝试在 src/ 中使用自定义 Makefile,但尽管它在命令行中运行良好,但在使用 R CMD INSTALL 时失败(“没有规则来构建目标 'myfolder/myfile.c' 需要对于 myfile.o")。我只找到了这一段关于子目录组织cran.r-project.org/doc/manuals/…,并没有看到任何有用的内容。谷歌搜索了一段时间后也没有,所以我在这里尝试了。

标签: r package directory


【解决方案1】:

作为“编写 R 扩展”手册 indicates here,pkg/src 下的 Makevars 文件允许为 C/C++/Fortran 代码嵌套子文件夹。 (参见例如RSiena 包)。

但是,我没有在 pkg/R 中找到任何有关自定义结构的信息。所以我写了一个小包(可用,虽然需要改进),它完成以下任务:

  • 加载/卸载在 pkg/R 下具有(可能)嵌套文件夹的包
  • 在其上启动 R 和/或 C 单元测试 [基本框架,将被替换(例如 RUnit 和检查)]
  • 将包导出为与 CRAN 兼容(展平 R 代码,生成 Makevars 文件)

如果它达到可发布状态,我将在此处链接它。 (目前我可以通过电子邮件发送)。

【讨论】:

  • 你的包有进展吗?
【解决方案2】:

官方包文档https://cran.r-project.org/doc/manuals/r-devel/R-exts.html,第 1.1.5 节包含以下引用:

R 和 man 子目录可能包含名为 unixwindows 的特定于操作系统的子目录。

我尝试在 R-3.5.1 中创建一个带有子目录的简单测试包,但它不能正常工作。

devtools::load_all()R CMD build 也没有成功从 R 中的子目录导出代码。

【讨论】:

    猜你喜欢
    • 2017-09-21
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 2011-07-26
    • 2013-04-13
    • 2018-01-12
    • 1970-01-01
    相关资源
    最近更新 更多