r - 典型的 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)。但我想最终开发一个包。
解决方案
我想,对于每个人来说,没有一个通用的答案。
对于某些人来说,RStudio 就是一切,而且是有原因的。可以使用包创建工具创建一个 Rcpp 包,然后编辑并点击按钮(或键盘快捷键)进行编译、重新加载和测试。
我在 shell 上也做了很多工作,所以我在 Emacs/ESS 中进行了大量的编辑,以及通过littler 包的命令行使用R CMD INSTALL
(由于重新编译未更改的代码是即时的)——这使我能够编写紧凑的表达式,加载新包并评估:以进行测试。
您还可以从 Emacs 启动构建和测试。正如我所说,这一切都取决于。ccache
r
r -lnewpackage -esomeFunc(somearg)
newpackage::someFunc()
somearg
这两个答案都是针对包装的,我在那里做真正的工作。当我只是在单个文件中测试某些内容时,我会在一个 Emacs 缓冲区中执行此操作,并sourceCpp()
在同一 Emacs 的另一个缓冲区中的 R 会话中执行此操作。或者有时我在 Emacs 中编辑并sourceCpp()
在 RStudio 中运行。
没有一个答案。找到适合你的。
此外,您问题的第一部分描述了包的初始设置。这不是编辑/编译/链接/测试周期的一部分,因为它是一次性的。为此,我们也有不同的方法,其中许多方法已在此处讨论过。
编辑:对您的问题的另一个主要误解是,一旦您拥有包,您通常不再使用sourceCpp()
。
推荐阅读
- java - 让国家/地区显示在 geotool 地图上
- typescript - 如何在惯用的打字稿中实现“带有方法的结构”
- javascript - Javascript 中的模拟方法——它们是如何工作的?
- powershell - Puppet-hiera-Function lookup() 没有找到值-Windows
- javascript - 如何过滤包含对象数组本身的对象数组?
- javascript - 来自提交的 jquery 未正确处理,event.preventDefault() 无法正常工作
- c++ - 在 C++ 中有效地计算 O(n^(1/3)) 中数字的除数
- android - 为什么R类不包含字段类型?
- nestjs - nestjs 网关向所有连接的套接字发出事件
- c++ - 如何在 24 位 SDL_Surface 上设置像素颜色?