根据Armadillo网站,您可以将lambda函数传入SET()
,例如
.each_col
以下Rcpp似乎有错误,报告"预期表达"
X.each_col( [](vec& a){ a.print(); } );
答案 0 :(得分:5)
你实际上必须告诉R使用C ++ 11才能获得lambda支持。神奇的线条是[[Rcpp::plugins("cpp11")]]
,它使一切正常:
但是一旦我这样做,我就会在cumsum()
上遇到问题。那里你也有太多const
。
所以这里有一个更简单的版本 与文档中的另一个lambda
一起工作 - 只是打印。我还转向ivec
和imat
以保持一致性:
#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
>