使用RcppArmadillo each_col和lambda函数?

时间:2017-02-19 01:54:22

标签: r rcpp

根据Armadillo网站,您可以将lambda函数传入SET(),例如

.each_col

以下Rcpp似乎有错误,报告"预期表达"

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

1 个答案:

答案 0 :(得分:5)

你实际上必须告诉R使用C ++ 11才能获得lambda支持。神奇的线条是[[Rcpp::plugins("cpp11")]],它使一切正常:

但是一旦我这样做,我就会在cumsum()上遇到问题。那里你也有太多const

所以这里有一个更简单的版本 与文档中的另一个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
>