我希望这不是太明显,因为我整天搜索都找不到答案。
说我有以下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()
, 我能做什么?
你应该使用 导出属性 在您想要导出的每个功能的前面。所以通过纠正你的文件
#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()
...
你应该使用 导出属性 在您想要导出的每个功能的前面。所以通过纠正你的文件
#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()
...