根据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
那里也有太多东西。
因此,这里是一家简单的版本做的工作与另一个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
>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句