2012-12-14 50 views
3

下面是一个小例子:如何从Rcpp定义R函数?

require(Rcpp) 
require(inline) 

src <- ' 
Rcpp::Environment glob = Rcpp::Environment::global_env(); 
glob.assign("foo" , "function(x) x + 1"); 
' 

myFun <- cxxfunction(body=src,plugin = "Rcpp") 
myFun() 

foo 
[1] "function(x) x + 1" 

如果没有意外,我得到的是一个字符变量,而不是一个功能。

+0

此外,我鼓励你看看'?sourceCpp'和'?cppFunction'作为'cxxfunction'的更强大的替代品。 –

回答

5

您需要通常的parse/eval组合才能将字符串转换为对象。

foo <- eval(parse(text = "function(x) x+1")) 
foo(1:10) 
# [1] 2 3 4 5 6 7 8 9 10 11 

Rcpp,你可以使用一个ExpressionVector

// [[Rcpp::export]] 
void fun(){ 
    ExpressionVector exp("function(x) x+1") ; 
    Function f = exp.eval(); 

    Rcpp::Environment glob = Rcpp::Environment::global_env(); 
    glob.assign("foo" , f); 
} 
+0

谢谢,ExpressionVector正是我正在寻找的 – ed82

+0

在这种情况下,请随时'接受'答案。 –

+0

@Dirk:完成。感谢修正语法高亮。 – ed82