我试图复制Rcpp
中的R矢量化和我首先尝试以下无故障代码:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double call(NumericVector x){
return sum(x);
}
输入call(Time)
> call(Time)
[1] 1919853
然后环境版本也很好用,
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double call(){
Environment env = Environment::global_env();
NumericVector Time = env["Time"];
return sum(Time);
}
输入call()
> call()
[1] 1919853
现在我正在尝试一些奇怪的事情,
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double call(){
Environment base("package:base");
Function sumc = base["sum"];
Environment env = Environment::global_env();
NumericVector Time = env["Time"];
double res = sumc(Time);
return res;
}
这次我收到一条错误消息:
trycpp.cpp:10:25: error: cannot convert ‘SEXP {aka SEXPREC*}’ to ‘double’ in initialization
double res = sumc(Time);
知道出了什么问题吗?
答案 0 :(得分:4)
你不能在Rcpp的一个向量上调用R函数(即sumc()
。执行此操作:
// [[Rcpp::export]]
double mycall(){
Environment base("package:base");
Function sumc = base["sum"];
Environment env = Environment::global_env();
NumericVector Time = env["Time"];
double res = sum(Time);
return res;
}
这里sum()
是Rcpp糖功能。