【发布时间】:2017-05-14 09:32:35
【问题描述】:
在此question 之后,我试图了解如何有效地更新Rccp::NumericMatrix 数据类型的子集。
我有以下场景:
-
Rcpp::NumericMatrix mof5 x 5需要更新几行和几列。 - 它将通过引用传递给一个函数(
void返回类型),该函数将其转换为arma::mat,并更新相应的submat()。 - 此时我不明白如何将函数内部发生的更改“应用”到传递给函数的
m矩阵。
代码如下:
#include <iostream>
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
void updateMatrix(const Rcpp::NumericMatrix &m)
{
std::cout << m << std::endl;
Rcpp::as<arma::mat>(m).submat(0, 0, 3, 3) = Rcpp::as<arma::mat>(m).submat(0, 0, 3, 3) + 1;
std::cout << m << std::endl;
}
要从 R 运行它,我使用:
m = matrix(0, 5, 5)
updateMatrix(m)
结果是:
> updateMatrix(m)
0.00000 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000
这是我第一次使用Rcpp 和RcppArmadillo,它们非常棒。感谢您对这种情况的任何帮助。
【问题讨论】:
标签: c++ r pass-by-reference rcpp armadillo