将 RcppArmadillo each_col 与 lambda 函数一起使用?
Using RcppArmadillo each_col with lambda function?
根据Armadillo网站,可以传入一个lambda函数给.each_col
,比如
X.each_col( [](vec& a){ a.print(); } );
下面的Rcpp好像有错误,报"Expected Expression"
#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
>
根据Armadillo网站,可以传入一个lambda函数给.each_col
,比如
X.each_col( [](vec& a){ a.print(); } );
下面的Rcpp好像有错误,报"Expected Expression"
#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
>