在R中定义一个矩阵,然后将其传递到C
Define a matrix in R and pass it to C++
我在R中定义了一个矩阵。我需要将此矩阵传递给C 函数,并在C 中进行操作。示例:在R中定义一个矩阵,
A <- matrix(c(9,3,1,6),2,2,byrow=T)
PROTECT( A = AS_NUMERIC(A) );
double* p_A = NUMERIC_POINTER(A);
我需要将此矩阵传递到C 函数,其中将使用矩阵A。
初始化类型vector<vector<double>>
的"数据"我似乎无法弄清楚如何做到这一点。我想以更复杂的方式思考,我敢打赌,有一种简单的方法可以做到这一点。
正如保罗所说,我建议将Rcpp
用于此类事情。但这也取决于您希望vector< vector<double> >
的意思。假设您想存储列,则可以这样处理矩阵:
require(Rcpp)
require(inline)
fx <- cxxfunction( signature( x_ = "matrix" ), '
NumericMatrix x(x_) ;
int nr = x.nrow(), nc = x.ncol() ;
std::vector< std::vector<double> > vec( nc ) ;
for( int i=0; i<nc; i++){
NumericMatrix::Column col = x(_,i) ;
vec[i].assign( col.begin() , col.end() ) ;
}
// now do whatever with it
// for show here is how Rcpp::wrap can wrap vector<vector<> >
// back to R as a list of numeric vectors
return wrap( vec ) ;
', plugin = "Rcpp" )
fx( A )
# [[1]]
# [1] 9 1
#
# [[2]]
# [1] 3 6
您可能要使用RCPP。该软件包允许轻松地集成R和C ,包括将对象从R到C 的传递。该包装可在Cran上找到。此外,Cran上的许多包装都使用RCPP,因此它们可以作为灵感。RCPP的网站在这里:
http://dirk.eddelbuettel.com/code/rcpp.html
包括一些教程。
相关文章:
- 为什么我不能定义一元运算符,然后在 MSVC 的模板类中声明具有相同名称的友元二进制运算符?
- 如何在命名空间中声明外部全局,然后定义它?
- 在宏中定义然后取消定义预处理器变量
- 正在使用放置-new,复制存储,然后访问值未定义的行为
- 如何将对象定义为一种类型,然后再将其声明为子类型
- 在其他编译器中使用_DEBUG定义,然后在Visual Studio中使用
- Cmake:如何构建自定义编译器二进制文件,然后将其用于某些目标?
- 使用cmake从文件中定义宏,然后在代码上使用它
- 在源文件中定义数组,然后在其他源文件中使用它
- 在R中定义一个矩阵,然后将其传递到C
- 在 C++11 中使用严格的混叠时,它是否定义为 _write_ 到 char*,然后从别名的非 char* 读取_
- 声明函数,然后在 C/C++ 中内联定义它
- 在自己的.cpp中定义一个结构,然后在main中使用它
- 在子类中定义一个属性,然后在父类中使用它,这在PHP中是一种奇怪的行为
- 在函数中定义一个动态数组,然后返回数组元素。如何释放阵列的内存?
- 必须先定义自动功能,然后才能使用它
- 如何?:将cv::Mat定义为类成员,然后在源代码文件中对其进行修改
- 如何定义一个变量,然后在目标[Makefile]中编译
- 如何将定义封装到类中?(使用const,然后确定其范围)
- c++ 11: bind std::sort用于用户定义的类型,然后使用该绑定作为ctor的参数