Rcpp:将向量组合成矩阵并使用 Rcout 打印行

Rcpp: Combining Vectors into Matrix and printing rows using Rcout

我在 Rcpp 中有以下代码:

NumericVector s_1 = NumericVector::create(0,0,-1,1,-1,1,1,-1,0);
NumericVector s_2 = NumericVector::create(0,-1,0,-1,1,1,0,2,-2);


// [[Rcpp::export]]
void print_vecs(){
  NumericMatrix mat(2,9);
  for (int i = 0 ; i < 2 ; i++){
    Rcpp::Rcout << mat.row(i); // Not working Trying to print the row
  }
}

所以基本上我想看看如何将 s_1s_2 组合成 NumericMatrix,然后遍历矩阵并打印行。还有 Rcpp 的简单教程吗?我找到了一些教程,但它们对我来说太高级了。感谢您的帮助。

你可以这样做:

mat.row(0) = s_1 ;
mat.row(1) = s_2 ;

您不能将矩阵的行发送到 Rcpp::cout,您可以做的是打印矩阵,如下所示:

Rf_PrintValue(mat) ;

为了补充 Romain 的回答,Armadillo 确实 很好地支持矩阵运算,并且可以通过 RcppArmadillo 轻松访问。

这里有一个变体:

#include <RcppArmadillo.h>

// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
void printVecs(arma::rowvec v1, arma::rowvec v2) {
  arma::mat m(2,9);
  m.row(0) = v1;
  m.row(1) = v2;
  m.print("Matrix m");

  // or equally well (where you could also print v1 and/or v2
  Rcpp::Rcout << "Matrix M\n" << m; 
  }
}

/*** R
 v1 <- c(0,0,-1,1,-1,1,1,-1,0)
 v2 <- c(0,-1,0,-1,1,1,0,2,-2)
 printVecs(v1, v2)
*/

您可以直接获取来源

R> Rcpp::sourceCpp("/tmp/mat.cpp")

R>  v1 <- c(0,0,-1,1,-1,1,1,-1,0)

R>  v2 <- c(0,-1,0,-1,1,1,0,2,-2)

R>  printVecs(v1, v2)
Matrix m
        0        0  -1.0000   1.0000  -1.0000   1.0000   1.0000  -1.0000        0
        0  -1.0000        0  -1.0000   1.0000   1.0000        0   2.0000  -2.0000
Matrix M
        0        0  -1.0000   1.0000  -1.0000   1.0000   1.0000  -1.0000        0
        0  -1.0000        0  -1.0000   1.0000   1.0000        0   2.0000  -2.0000
R> 

关于您关于教程的问题:是的,有。使用搜索引擎;你应该找到很多。这个我也wrote a book.