Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用带有lambda函数的RcppArmadillo每个列?_R_Rcpp - Fatal编程技术网

使用带有lambda函数的RcppArmadillo每个列?

使用带有lambda函数的RcppArmadillo每个列?,r,rcpp,R,Rcpp,根据犰狳网站,您可以将lambda函数传入 X.each_col([](vec&a){a.print();}) 但以下Rcpp似乎有错误,报告“预期表达式” #包括 //[[Rcpp::depends(RcppArmadillo)]] 使用名称空间Rcpp; 使用arma; //[[Rcpp::导出]] arma::vec colCumSum(常数arma::mat&X){ 返回X.each_col([](常量arma::vec&b){b.cumsum();}); } 实际上,为了获得lambd

根据犰狳网站,您可以将lambda函数传入

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

但以下Rcpp似乎有错误,报告“预期表达式”

#包括
//[[Rcpp::depends(RcppArmadillo)]]
使用名称空间Rcpp;
使用arma;
//[[Rcpp::导出]]
arma::vec colCumSum(常数arma::mat&X){
返回X.each_col([](常量arma::vec&b){b.cumsum();});
}

实际上,为了获得lambda支持,您必须告诉R使用C++11。神奇的一行是
[[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支持,您必须告诉R使用C++11。神奇的一行是
[[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)
*/

谢谢事实证明,调用cumsum的正确方法是
cumsum(b)
。此外,进一步挖掘犰狳已经有了一种方法,可以使用
cumsum(X,0)
对log的cumsum或其他转换使用lambda。但是谢谢你的跟进!谢谢事实证明,调用cumsum的正确方法是
cumsum(b)
。此外,进一步挖掘犰狳已经有了一种方法,可以使用
cumsum(X,0)
对log的cumsum或其他转换使用lambda。但是谢谢你的跟进!
> 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
>