【发布时间】:2014-02-09 03:08:04
【问题描述】:
我有一个包含一组用户定义的 R 函数的 R 代码。我试图让代码运行得更快,当然最好的选择是使用 Rcpp。我的代码涉及相互调用的函数。因此,如果我用 C++ 编写一些函数,我应该能够在我的 C++ 代码中调用和运行我的一些 R 函数。在一个简单的例子中,考虑下面的 R 代码:
mySum <- function(x, y){
return(2*x + 3*y)
}
x <<- 1
y <<- 1
现在考虑我尝试访问上述函数的 C++ 代码:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int mySuminC(){
Environment myEnv = Environment::global_env();
Function mySum = myEnv["mySum"];
int x = myEnv["x"];
int y = myEnv["y"];
return wrap(mySum(Rcpp::Named("x", x), Rcpp::Named("y", y)));
}
当我使用内联函数 sourceCpp() 在 R 中获取文件时,出现错误:
"invalid conversion from 'SEXPREC*' to int
谁能帮我调试代码?我的代码高效吗?可以概括一下吗?有没有比我在代码中使用 mySum 函数更好的主意?
非常感谢您的帮助。
【问题讨论】:
-
@DirkEddelbuettel,非常尊重,我不同意 - 上面的链接解决了一个完全不同的问题。
-
它指出 a) 调用函数很容易,b) 从 C++ 调用 R 函数并不比从 R 调用快(不清楚你是否对此感到困惑)和c)您的 int 转换问题是一个无关的初学者问题。