D1X*_*D1X 2 c++ r rcpp r-package
我正在用 C++ 为 R 构建一个包。如何在代码中包含库?例如,如果我使用#include <vector>向量,R 检查失败并出现错误
> fatal error: vector: No such file or directory
> E> #include <vector>
> E> ^~~~~~~~
> E> compilation terminated.
Run Code Online (Sandbox Code Playgroud)
我尝试LinkingTo: vector在描述文件中使用,如另一个答案中所述,但它不起作用。
最近添加的标题为使用外部库创建 R 包的十三个简单步骤的小插图涵盖了您要求的主题。
非常广泛地,可以有三种类型的带有外部库的包:
-I...标志外部库是最难的,因为 R 非常便携的特性让你担心如何在 Windows、macOS 和不同的 Linux 版本上使用该库进行构建。
说了这么多,这里你的问题一定是更根本的。我们不能说太多,因为你没有提供的MCVE但它很容易证明它RCPP当然知道这里的STL向量类(初始密码为一条线,这里被打破对博览会唯一)
R> Rcpp::cppFunction("std::vector<int> doubleMe(std::vector<int> x) { \
std::vector<int> y(x.size()); for (size_t i=0; i<x.size(); i++) \
y[i] = x[i]+x[i]; return y; }")
R> doubleMe(1:3)
[1] 2 4 6
R>
Run Code Online (Sandbox Code Playgroud)
这清楚地表明 Rcpp 知道在哪里可以找到头文件——所以要么你安装了编译器和库,要么在你的计算机上以某种非常不寻常的方式安装了 R,或者以错误的方式调用了 R。有关Rcpp的更多详细信息,请参阅Rcpp 简介。
PS 对于 Rcpp 类型,它只是
R> Rcpp::cppFunction("IntegerVector doubleMe(IntegerVector x) { return x+x; }")
R> doubleMe(2:4)
[1] 4 6 8
R>
Run Code Online (Sandbox Code Playgroud)
PPS 当然,您也可以在没有 Rcpp的情况下完成所有这些操作,(在这种情况下为必读)Writing R Extensions手册中描述了如何执行此操作。在我的谈话页面上,我有几个(较旧的)教程的链接,这些教程来自十多年前,其中显示了示例。由于这实际上很麻烦,我建议使用 Rcpp。