向量从R到c++的语法是什么?

What is the R to C++ syntax for vectors?

本文关键字:语法 是什么 c++ 向量      更新时间:2023-10-16

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

有人能帮助我了解如何导入R对象作为c++矢量的文档吗?(我特别尝试导入一个R列表,其中包括int, double和数字列表的混合物。)

Rcpp-introduction.pdf声明:

从R对象到c++对象的反向转换是通过签名为:

Rcpp::as模板
template <typename T> T as(SEXP x);

它提供了较少的性,并且目前处理R对象转换为基本类型(例如,bool, int, std::string,…),基本类型的STL向量(例如,std::vector<bool>, std::vector<double>,…)和提供接受一个SEXP的构造函数的任意类型。

我对这意味着什么感到困惑,即"模板","typename T"answers"T"填充了什么。我已经看到了很多关于原语的例子,例如

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

但是我不明白这种语法如何映射到上面的模板文档,而且(更重要的是)不明白如何将其推广到STL向量

也许你把它弄得太复杂了。一个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或这里询问。

Edit:为了完整起见,与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>