Rcpp - 在 sourceCpp 引用的文件中使用多个 C++ 函数?

标签 r rcpp

我希望这不是太明显,因为我已经搜索了一整天并且找不到答案。

假设我有以下 R 文件:

library(Rcpp)
sourceCpp("cfile.cpp")

giveOutput(c(1,2,3))

它编译以下 C++ 文件:
#include <Rcpp>
using namespace Rcpp;
// [[Rcpp::export]]

NumericVector plusTwo(NumericVector x){
  NumericVector out = x + 2.0;

  return out;
}

NumericVector giveOutput(NumericVector a){

NumericVector b = plusTwo(a);
return b;
}

无论我尝试什么,Rcpp 预处理器都会生成 plusTwo()可用,和 giveOutput()一点也不。我能够找到的文档说这是一个应该创建一个包的点,但是在阅读包小插图之后,它似乎比我需要的要复杂一个数量级。

没有明确定义 plusTwo()里面 giveOutput() , 我能做些什么?

最佳答案

您应该在要导出的每个函数前使用 export 属性。因此,通过将文件更正为

#include <Rcpp.h>

using namespace Rcpp;

// [[Rcpp::export]]
NumericVector plusTwo(NumericVector x){
  NumericVector out = x + 2.0;
  return out;
}

// [[Rcpp::export]]
NumericVector giveOutput(NumericVector a){
  NumericVector b = plusTwo(a);
  return b;
}

我得到了想要的行为:
R> sourceCpp("/tmp/patrick.cpp")
R> giveOutput(1:3)
[1] 3 4 5
R> plusTwo(1:3)
[1] 3 4 5
R> 

哦,创建一个包就像调用 Rcpp.package.skeleton() 一样简单(但请阅读它的帮助页面,尤其是 attributes 参数)。我知道至少有一个 CRAN 软件包,它开始了您从这里开始的方式,并且显然是通过 Rcpp.package.skeleton() 进行的。 ...

关于Rcpp - 在 sourceCpp 引用的文件中使用多个 C++ 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14667766/

相关文章:

r - 更改直方图中的调色板

r - ggplot2 geom_point 与用于二进制数据的 binned x 轴

r - 我如何摆脱 arrangeGrob 中的随机背景网格

c++ - 在 C++ 中为 Rcpp 中的 predict() 输入创建数据框

r - 将整数向量写入文件不会产生 xxd 中所示的预期值

r - 获取R对象的完整属性

r - 测量 R 中一条线上所有点的距离(sf 中的线串)

r - 通过雪在并行代码中使用 Rcpp 来创建集群

r - 在RCpp中将DataFrame转换为Matrix的最佳方法

c++ - Rcpp:一个函数适用于 NumericVector,另一个需要将其视为标量