首页 > 解决方案 > 典型的 Rcpp 编辑-编译-测试循环是什么样的?

问题描述

我只能找到有关如何安装现成的 R 扩展包的信息,但没有提到扩展包的开发人员在日常开发过程中必须使用哪些命令。我正在使用 Rcpp,并且我在 Windows 上。

如果这是一个典型的 C++ 项目,它会是这样的:

edit
make  # oops, typo
edit  # fix typo
make  # oops, forgot an #include
edit
make  # good; updates header dependencies for subsequent 'make' automatically
./fooreader  # test it
make install # only now I'm ready

日常开发 Rcpp 包项目需要哪些命令?

我已经使用 R 命令行中的这些命令分配了一个框架项目:

library(Rcpp)
Rcpp.package.skeleton("FooReader", example_code=FALSE,
         author="My Name", email="my.email@example.com")

这分配了 3 个文件:

DESCRIPTION
NAMESPACE
man/FooReader-package.Rd

现在我将源代码放入

src/readfoo.cpp

这些内容:

#include <Rcpp.h>

#error here

我知道我可以从 R 命令行运行它:

Rcpp::sourceCpp("D:/Projects/FooReader/src/readfoo.cpp")

(这会运行编译器并指示#error)。但我想最终开发一个包。

标签: rrcpp

解决方案


我想,对于每个人来说,没有一个通用的答案。

对于某些人来说,RStudio 就是一切,而且是有原因的。可以使用包创建工具创建一个 Rcpp 包,然后编辑并点击按钮(或键盘快捷键)进行编译、重新加载和测试。

我在 shell 上也做了很多工作,所以我在 Emacs/ESS 中进行了大量的编辑,以及通过littler 包的命令行使用R CMD INSTALL(由于重新编译未更改的代码是即时的)——这使我能够编写紧凑的表达式,加载新包并评估:以进行测试。 您还可以从 Emacs 启动构建和测试。正如我所说,这一切都取决于。ccacherr -lnewpackage -esomeFunc(somearg)newpackage::someFunc()somearg

这两个答案都是针对包装的,我在那里做真正的工作。当我只是在单个文件中测试某些内容时,我会在一个 Emacs 缓冲区中执行此操作,并sourceCpp()在同一 Emacs 的另一个缓冲区中的 R 会话中执行此操作。或者有时我在 Emacs 中编辑并sourceCpp()在 RStudio 中运行。

没有一个答案。找到适合你的。

此外,您问题的第一部分描述了包的初始设置。这不是编辑/编译/链接/测试周期的一部分,因为它是一次性的。为此,我们也有不同的方法,其中许多方法已在此处讨论过。

编辑:对您的问题的另一个主要误解是,一旦您拥有包,您通常不再使用sourceCpp()


推荐阅读