首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >典型的Rcpp编辑-编译-测试周期是什么样子的?

典型的Rcpp编辑-编译-测试周期是什么样子的?
EN

Stack Overflow用户
提问于 2018-07-04 20:47:09
回答 2查看 106关注 0票数 0

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

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

代码语言:javascript
复制
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命令行使用以下命令分配了一个框架项目:

代码语言:javascript
复制
library(Rcpp)
Rcpp.package.skeleton("FooReader", example_code=FALSE,
         author="My Name", email="my.email@example.com")

这分配了3个文件:

代码语言:javascript
复制
DESCRIPTION
NAMESPACE
man/FooReader-package.Rd

现在我把源代码放到

代码语言:javascript
复制
src/readfoo.cpp

有了这些内容:

代码语言:javascript
复制
#include <Rcpp.h>

#error here

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

代码语言:javascript
复制
Rcpp::sourceCpp("D:/Projects/FooReader/src/readfoo.cpp")

(这确实会运行编译器,并指示#错误)。但我最终还是想开发一个包。

EN

回答 2

Stack Overflow用户

发布于 2018-07-04 21:28:30

我想,并不是每个人都有通用的答案。

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

我还在shell上做了很多工作,所以我在Emacs/ESS和R CMD INSTALL中做了相当多的编辑(多亏了ccache可以立即重新编译未更改的代码),通过r使用较小的包的命令行--这允许我编写紧凑的表达式,加载新的包并计算:r -lnewpackage -esomeFunc(somearg)来使用somearg测试newpackage::someFunc()

您还可以从Emacs启动构建和测试。正如我所说的,这一切都取决于。

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

没有一个答案。找出适合你的方法。

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

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

票数 2
EN

Stack Overflow用户

发布于 2018-07-04 21:56:46

为了测试R包,必须将其安装到(临时)库中,以便可以将其附加到正在运行的R进程。因此,您通常需要:

  • R CMD build .生成package_version.tar.gz
  • R CMD check <package_version.tar.gz>以测试软件包,包括放置在testsfolder
  • R CMD INSTALL <package_version.tar.gz>中以将其安装到库

中的测试

之后,您可以附加该包并对其进行测试。我经常尝试使用更多的TTD方法,这意味着我不必对包执行INSTALL操作。运行单元测试(例如通过R CMD check)就足够了。

所有这些都独立于Rcpp。对于使用Rcpp的包,您需要在执行这些步骤之前调用Rcpp::compileAttributes(),例如使用Rscript -e 'Rcpp::compileAttributes()'

如果您使用RStudio进行包开发,它通过devtools包提供了很多自动化功能。我仍然发现知道在引擎盖下发生了什么是有用的,这绝不是必需的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51174070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档