r-使用rcpparmadillo每个_col和lambda函数



根据Armadillo网站,您可以将lambda功能传递到.each_col中,例如

X.each_col( [](vec& a){ a.print(); } );

以下RCPP似乎有错误,报告了"预期表达式"

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
// [[Rcpp::export]]
arma::vec colCumSum(const arma::mat& X) {
  return X.each_col( [](const arma::vec& b){ b.cumsum(); } );  
}

您实际上必须告诉R使用C 11才能获得Lambda支持。魔术线是[[Rcpp::plugins("cpp11")]],这一切都可以正常工作:

,但是一旦我这样做,我就会在cumsum()上遇到问题。您的const也太多了。

因此,这是一个更简单的版本, do 与文档中的另一个lambda一起使用,它只是打印。我还求助于ivecimat以达到一致性:

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::plugins("cpp11")]]
// [[Rcpp::export]]
arma::ivec colCumSum(arma::imat& X) {
  X.each_col( [](arma::ivec& a){ a.print(); } );
  return X.col(0);
}
/*** R
M <- matrix(1:16, 4, 4)
colCumSum(M)
*/

采购此消息时,它会构建并运行。您将需要解决lambda用例以减少cumsum()

> sourceCpp("/tmp/foo.cpp")
> M <- matrix(1:16, 4, 4)
> colCumSum(M)
        1
        2
        3
        4
        5
        6
        7
        8
         9
        10
        11
        12
        13
        14
        15
        16
     [,1]
[1,]    1
[2,]    2
[3,]    3
[4,]    4
> 

最新更新