【问题标题】:rep_each in Rcpp sugarRcpp 糖中的 rep_each
【发布时间】:2014-01-19 23:40:31
【问题描述】:

几天前我开始学习 Rcpp 包,我正在逐渐学习如何使用这个包。我可以看到,对于 R 中的许多函数,已经编写了一个相应的函数,它通过 Rcpp 包在 C++ 中的工作方式非常相似,我猜这就是所谓的“Rcpp Sugar”。我试图在我的 C++ 代码中使用类似于 rep() function(R) 的东西,我发现我们在 Rcpp 糖中有一个叫做 rep_each 的东西:

然后我找到http://dirk.eddelbuettel.com/code/rcpp/html/classRcpp_1_1sugar_1_1Rep__each.html

问题是看了这个页面,我还是不知道怎么用。即使我不知道争论是什么。是否有提供不同 Rcpp 糖功能示例的文档?

非常感谢

【问题讨论】:

    标签: r rcpp


    【解决方案1】:

    Rep_each 模板类是一个实现细节。您要使用的是rep_each 函数。例如:

    #include <Rcpp.h>
    using namespace Rcpp ;
    
    // [[Rcpp::export]]
    NumericVector rep_example( NumericVector x, int n){
      NumericVector res = rep_each(x, n) ;
      return res ;
    }
    

    【讨论】:

    • 完美。非常感谢。您的回答非常有帮助,让我了解如何实现其他 Rcpp 糖功能。
    【解决方案2】:

    您可以尝试以下任何一种:

    除此之外,是的,阅读标题/源代码是一种常见的后备:)

    【讨论】:

    • 嗨@Dirk,首先我要感谢你通过编写 Rcpp 包对 R 做出的巨大贡献。你的书也很有帮助。关于你的答案,我在 2 和 3 中找不到它。关于 Rcpp Sugar 小插图,你的意思是 cran.r-project.org/web/packages/Rcpp/vignettes/Rcpp-sugar.pdf
    • 我正在寻找的是如何使用 Rep_each 的示例。我在我的代码中写了这个:“Rcpp::NumericVector simIdC = Rep_each(seq_len(nSubC), nMeasC);”但它会导致错误。
    • 嗯......也许还没有人为你写过那个文档?也许全世界都在等待制作一个评论示例并将其提交给Rcpp Gallery
    【解决方案3】:

    下面的简单程序展示了 rep、rep_each 和 rep_len 的作用以及它们之间的区别。

    #include <Rcpp.h>
    using namespace Rcpp;
    
    // [[Rcpp::export]]
    NumericVector rep_test(NumericVector vec, int kount) {
        return rep(vec, kount);
    }
    
    // [[Rcpp::export]]
    NumericVector rep_each_test(NumericVector vec, int kount) {
        return rep_each(vec, kount);
    }
    
    // [[Rcpp::export]]
    NumericVector rep_len_test(NumericVector vec, int kount) {
        return rep_len(vec, kount);
    }
    
    /*** R
    vec = seq(-1, 1, length.out = 3)
    vec
    rep_test(vec, 4)
    rep_each_test(vec, 4)
    rep_len_test(vec, 4)
    */
    

    输出分别是,

    > vec
     [1] -1  0  1
    > rep_test(vec, 4)
     [1] -1  0  1 -1  0  1 -1  0  1 -1  0  1
    > rep_each_test(vec, 4)
     [1] -1 -1 -1 -1  0  0  0  0  1  1  1  1
    > rep_len_test(vec, 4)
     [1] -1  0  1 -1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 2020-01-08
      • 1970-01-01
      • 2013-05-21
      相关资源
      最近更新 更多