Rcpp:将向量组合到Matrix中并使用Rcout打印行

时间:2015-04-10 09:02:12

标签: r rcpp

我在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的简单教程吗?我找到了一些教程,但它们对我来说太先进了。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

您可以这样做:

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

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

Rf_PrintValue(mat) ;

答案 1 :(得分:2)

为了补充Romain的答案,矩阵操作在犰狳中得到了很好的支持,并且可以通过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