【发布时间】:2014-10-04 15:25:07
【问题描述】:
#include <Rcpp.h>
#include <vector>
extern "C"
{
#include "cheader.h"
}
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector cppfunction(NumericVector inputR){
double const* input = inputR.begin();
size_t N = inputR.size();
double output[10*N];
cfunction(input, N, output);
std::vector<double> outputR(output, output + sizeof(output) / sizeof(double));
return wrap(outputR);
}
这可行,除了我必须手动将向量 outputR 转换为 R 中的矩阵。我当然也可以将 outputR 转换为 NumericMatrix(或者我可以吗?)然后返回,但我真正的问题是上述过程是否最优?我是否必须先将输出转换为 std::vector 再转换为 NumericVector/Matrix 或者我可以以某种方式避免这种情况?我尝试直接包装输出,但没有奏效。
【问题讨论】:
-
什么是
cfunction?cheader.h中有什么内容?如果没有这些信息,您将不会获得太多帮助。 -
不要使用运行时大小的数组:
double output[10*N]; -
是的,对不起,我可能应该删除该标题部分,因为这与此处无关,并为 cfunction 给出某种定义,尽管我认为该函数的确切作用也不相关。跨度>