我只能找到关于如何安装现成的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 readyRcpp包项目的日常开发需要哪些命令?
我已经从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")(这确实会运行编译器,并指示#错误)。但我最终还是想开发一个包。
发布于 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()了。
发布于 2018-07-04 21:56:46
为了测试R包,必须将其安装到(临时)库中,以便可以将其附加到正在运行的R进程。因此,您通常需要:
R CMD build .生成package_version.tar.gzR CMD check <package_version.tar.gz>以测试软件包,包括放置在testsfolderR CMD INSTALL <package_version.tar.gz>中以将其安装到库中的测试
之后,您可以附加该包并对其进行测试。我经常尝试使用更多的TTD方法,这意味着我不必对包执行INSTALL操作。运行单元测试(例如通过R CMD check)就足够了。
所有这些都独立于Rcpp。对于使用Rcpp的包,您需要在执行这些步骤之前调用Rcpp::compileAttributes(),例如使用Rscript -e 'Rcpp::compileAttributes()'。
如果您使用RStudio进行包开发,它通过devtools包提供了很多自动化功能。我仍然发现知道在引擎盖下发生了什么是有用的,这绝不是必需的。
https://stackoverflow.com/questions/51174070
复制相似问题