向量的R to C ++语法是什么?

时间:2013-05-24 17:14:42

标签: c++ c vector rcpp

我是一名R和C程序员,试图使用Rcpp为用C编写的程序创建一个R(和C ++)包装器。我对C ++并不熟悉。

有人可以帮我理解有关如何将R对象导入为C ++向量的文档吗? (我特意尝试导入一个包含int,double和numeric列表混合的R列表。)

Rcpp-introduction.pdf声明:

  

从R对象到C ++对象的反向转换是通过变体来实现的   签名为{/ p>的Rcpp::as模板

template <typename T> T as(SEXP x);
     

它提供较少的性别,目前处理R对象转换为原始类型(例如,boolintstd::string,...),原始类型的STL向量(例如,   std::vector<bool>std::vector<double>,...)和提供带有SEXP的构造函数的任意类型。

我对这意味着什么感到困惑,即为“模板”,“typename T”和“T”填写了什么。我已经看到了原型的许多例子,例如

int dx = Rcpp::as<int>(x);

但是我不明白这个语法如何映射到上面的模板文档,并且(更重要的是)不理解如何将它概括为STL向量。

1 个答案:

答案 0 :(得分:1)

也许你让它太复杂了。 R向量只是变成了C ++向量“因为这就是Rcpp为你做的事情。”

这是使用Rcpp::NumericVector

R> library(Rcpp)
R> cppFunction('NumericVector ex1(NumericVector x) { return x + 2;}')
R> ex1(1:4)  # adds two
[1] 3 4 5 6
R> 

这使用了我们为+类型定义NumericVector的事实。您也可以传入std::vector<double>进出,但需要添加一些通常不止一个语句的操作,所以我没有在这里......

简而言之,请继续阅读文档,并在rcpp-devel或此处询问是否需要帮助。

编辑:为了完整性,与STL向量相同

R> cppFunction('std::vector<double> ex2(std::vector<double> x) { \
                 for (size_t i=0; i<x.size(); i++) x[i] = x[i] + 2; return x;}')
R> ex2(1:4)
[1] 3 4 5 6
R>