Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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
使用C++;函数作为另一个C++;由导出的Rcpp函数调用的函数 我看到可以使用RCPP将R函数作为参数传递给C++。例如,您可以执行以下操作: // [[Rcpp::export]] arma::mat example_cpp_func(Rcpp::Function my_r_func, arma::mat a){ return Rcpp::as<arma::mat>(my_r_func(a)); }_Rcpp_Rcpparmadillo - Fatal编程技术网

使用C++;函数作为另一个C++;由导出的Rcpp函数调用的函数 我看到可以使用RCPP将R函数作为参数传递给C++。例如,您可以执行以下操作: // [[Rcpp::export]] arma::mat example_cpp_func(Rcpp::Function my_r_func, arma::mat a){ return Rcpp::as<arma::mat>(my_r_func(a)); }

使用C++;函数作为另一个C++;由导出的Rcpp函数调用的函数 我看到可以使用RCPP将R函数作为参数传递给C++。例如,您可以执行以下操作: // [[Rcpp::export]] arma::mat example_cpp_func(Rcpp::Function my_r_func, arma::mat a){ return Rcpp::as<arma::mat>(my_r_func(a)); },rcpp,rcpparmadillo,Rcpp,Rcpparmadillo,这在R中是可能的,但是当我尝试使用Rcpp/RcppArmadillo时,我得到了以下错误: 无法将“f1”从“arma::mat()(arma::mat&){aka'arma::mat()(arma::mat&)}转换为“Rcpp::Function”{aka'Rcpp::Function_Impl} 错误消息表示所有的内容:对于C++ f1是一个函数,它期望 ARMA::Mat < /Cord>作为参数,并返回 ARMA::MAT。这与Rcpp::Function大不相同,后者是R函数的薄

这在R中是可能的,但是当我尝试使用Rcpp/RcppArmadillo时,我得到了以下错误:

无法将“f1”从“arma::mat()(arma::mat&){aka'arma::mat()(arma::mat&)}转换为“Rcpp::Function”{aka'Rcpp::Function_Impl}


错误消息表示所有的内容:对于C++ <代码> f1是一个函数,它期望<代码> ARMA::Mat < /Cord>作为参数,并返回<代码> ARMA::MAT。这与

Rcpp::Function
大不相同,后者是R函数的薄包装。我认为有三种可能性:

  • 编写一个可选的
    f2
    函数,该函数需要一个函数指针或带有适当参数的
    std::function
    (需要C++11)

  • 将类型为
    Rcpp::Function
    的参数添加到
    f3
    中,该参数用于调用
    f2

  • 使用
    Rcpp::Environment
    Rcpp:function
    获取适当的R函数


  • 没有更多的关于用例的信息,很难提供更多的建议。

    < P>错误信息表示:C++到代码> f1 < /C>是一个函数,它期望<代码> ARMA::Mat < /Cord>作为参数,并返回<代码> ARMA::MAT。这与
    Rcpp::Function
    大不相同,后者是R函数的薄包装。我认为有三种可能性:

  • 编写一个可选的
    f2
    函数,该函数需要一个函数指针或带有适当参数的
    std::function
    (需要C++11)

  • 将类型为
    Rcpp::Function
    的参数添加到
    f3
    中,该参数用于调用
    f2

  • 使用
    Rcpp::Environment
    Rcpp:function
    获取适当的R函数


  • 如果没有关于用例的更多信息,就很难提供更多建议。

    下面是一个使用Ralf在#1中所写方法的完整示例。您可以在这里使用纯C/C++函数指针,尽管您可以使用C++11做更复杂的事情

    #include<RcppArmadillo.h>
    
    // [[Rcpp::depends(RcppArmadillo)]]
    
    typedef arma::mat (*functype)(arma::mat&);
    
    arma::mat f1(arma::mat& a){
      return a+1;
    }
    
    arma::mat f2(functype g, arma::mat a){
      return g(a);
    }
    
    //[[Rcpp::export]]
    arma::mat f3(arma::mat a){
      return f2(f1, a);
    }
    

    下面是一个使用Ralf在#1中所述方法的完整示例。您可以在这里使用纯C/C++函数指针,尽管您可以使用C++11做更复杂的事情

    #include<RcppArmadillo.h>
    
    // [[Rcpp::depends(RcppArmadillo)]]
    
    typedef arma::mat (*functype)(arma::mat&);
    
    arma::mat f1(arma::mat& a){
      return a+1;
    }
    
    arma::mat f2(functype g, arma::mat a){
      return g(a);
    }
    
    //[[Rcpp::export]]
    arma::mat f3(arma::mat a){
      return f2(f1, a);
    }
    

    函数指针的良好参考备忘单:https://f**kingfunctionpointers.com/。不确定是否允许骂人,但URL中有f字:函数指针的OGood参考备忘单:https://f**kingfunctionpointers.com/。不确定是否允许骂人,但URL中有f字:O
    #include<RcppArmadillo.h>
    
    // [[Rcpp::depends(RcppArmadillo)]]
    
    typedef arma::mat (*functype)(arma::mat&);
    
    arma::mat f1(arma::mat& a){
      return a+1;
    }
    
    arma::mat f2(functype g, arma::mat a){
      return g(a);
    }
    
    //[[Rcpp::export]]
    arma::mat f3(arma::mat a){
      return f2(f1, a);
    }
    
    > f3(matrix(1))
         [,1]
    [1,]    2