C / C ++和Rcpp的新手。
我正在尝试修改我找到的示例(在这种情况下,我修改了“yada”模块示例http://cran.r-project.org/web/packages/Rcpp/vignettes/Rcpp-modules.pdf)并扩展它们以测试我的理解。
我目前编译的示例但是没有预期的行为。我猜它我错过了一些东西,但我无法确定我在文档中发现的缺失。任何帮助将不胜感激。
示例代码如下。
library(inline)
fx=cxxfunction(,plugin="Rcpp",include='#include<Rcpp.h>
#include<string>
typedef struct containerForChars {const char *b;} containChar;
containChar cC;
const char* toConstChar(std::string s){return s.c_str();}
void setB(std::string s){
cC.b = toConstChar(s);
}
std::string getB(void){
std::string cs = cC.b;
return cs;
}
RCPP_MODULE(ex1){
using namespace Rcpp;
function("setB",&getB);
function("getB",&getB);
}')
mod=Module("ex1",getDynLib(fx))
f<-mod$setB
g<-mod$getB
f("asdf")
g()
而不是f("asdf")
将cC.b
设置为"asdf"
,我收到以下错误,
Error in f("asdf") : unused argument ("asdf")
我希望将f()
的参数设置为cC.b
的值,g()
将检索或获取我使用f
设置的值。我的猜测是,Module和RCPP_MODULE所做的任何魔法都不能使用我定义的结构。我想希望它的工作还不够:P。
答案 0 :(得分:4)
常见错字。而不是
function("setB",&getB);
function("getB",&getB);
DO
function("setB",&setB); # set, not get
function("getB",&getB);
然后一切正常:
R> f("asdf")
R> g()
[1] "asdf"
R>
我还在顶部添加library(inline)
。