我是一名统计学家,与其他领域的科学家合作很多,他们不使用 R,而主要使用 C++。有时我想给他们一个可以运行但也使用 R 功能的 C++ 程序。这是一个玩具示例
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int mytry() {
NumericVector x(5);
x = rnorm(5);
Rcout<<mean(x)<<"\n";
return 0;
}
现在,当我尝试在 C++ 编译器中运行它时(我使用的是 Code::Block),我收到如下错误消息:
对“Rprintf”的未定义引用以及其他类似错误的列表。
如果这是一个愚蠢的问题,我深表歉意,但我不是 C++ 专家。我自己只通过 Rcpp 使用它来用 C++ 替换小的 R 代码片段,这样它们运行得更快。
Rcpp
被设计为构建为 R 扩展包,它可以always 假设从 R 调用,因此与许多 R 符号链接。 这里有两个基本选项:第一个也是更常见的一个是将 C++ 实现分离为“纯 C++”,您可以将其交给您的同事,以及一些剩余的“粘合剂”以从 R 调用/返回到 R。可能是你最好的选择——想想,
例如,用std::vector<double>
而不是
Rcpp::NumericVector
第二个是将 R 实际粘贴到您的 C++ 应用程序中,您可以使用 CRAN 包 RInside,这也大量使用 Rcpp
。这两种方法都有示例(您可以通过在搜索词中添加
Rcpp
来在 3000 个
[rcpp]
答案中进行搜索)以及在Rcpp Gallery 等地方。