我希望使用Rcpp将复数从R传递到我的cpp代码。我尝试以类似于传递double和integer的方式来传递复数:
#include <complex>
#include <Rcpp.h>
using namespace Rcpp;
RcppExport SEXP mandelC(SEXP s_c) {
std::complex<double> c = ComplexVector(s_c)[0];
}
然而,这段代码无法编译并且会报错:
g++ -I/usr/share/R/include -DNDEBUG -I/usr/share/R/include -fopenmp -I/home/siim/lib/R/Rcpp/include -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g -c a.cpp -o a.o
a.cpp: In function ‘SEXPREC* mandelC(SEXP)’:
a.cpp:7:50: error: conversion from ‘Rcpp::traits::storage_type<15>::type {aka Rcomplex}’ to non-scalar type ‘std::complex<double>’ requested
std::complex<double> c = ComplexVector(s_c)[0];
^
很明显,我做了些错误的事情但是我一直没有找到任何例子。有人能指点我正确的方向吗?
SEXP
传输。但我发现纯C接口太麻烦了,你似乎也迷失在其中。Rcpp保持了许多本应该相当简单的东西...就是这样:相当简单。 - Dirk Eddelbuettelverbose=TRUE
调用cppFunction()
,则会看到一些生成的代码,就像在使用compileAttributes()
生成绑定的包中一样。 - Dirk Eddelbuettel