Frage rep_each in Rcpp Zucker


Ich habe vor ein paar Tagen angefangen, etwas über das Rcpp-Paket zu lernen und lerne allmählich, wie man mit diesem Paket arbeitet. Ich kann sehen, dass für viele Funktionen in R bereits eine entsprechende Funktion geschrieben wurde, die in C ++ über das Rcpp-Paket sehr ähnlich funktioniert, und ich vermute, das wird als "Rcpp Sugar" bezeichnet. Ich habe versucht, etwas ähnliches zu rep () - Funktion (R) in meinem C ++ - Code zu verwenden, und ich fand, dass wir in Rcpp Zucker etwas namens rep_each haben:

Ich habe dann gefunden http://dirk.eddelbuettel.com/code/rcpp/html/classRcpp_1_1sugar_1_1Rep__each.html

Das Problem ist nach dem Lesen dieser Seite, ich habe immer noch keine Ahnung, wie man es benutzt. Auch ich weiß nicht, was die Argumente sind. Gibt es eine Dokumentation, die Beispiele für verschiedene Zuckerfunktionen von Rcpp liefert?

Vielen Dank


5
2018-01-19 23:40


Ursprung


Antworten:


Das Rep_each Template-Klasse ist ein Implementierungsdetail. Was Sie verwenden möchten, ist die rep_each Funktion. Beispielsweise:

#include <Rcpp.h>
using namespace Rcpp ;

// [[Rcpp::export]]
NumericVector rep_example( NumericVector x, int n){
  NumericVector res = rep_each(x, n) ;
  return res ;
}

7
2018-01-20 09:25



Du könntest eins von diesen versuchen:

Abgesehen davon, ja, lesen Header / Quelle ist ein häufiger Fallback :)


3
2018-01-19 23:44



Das folgende einfache Programm zeigt, was rep, rep_each und rep_len tun und welche Unterschiede zwischen ihnen bestehen.

#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)
*/

Ausgaben sind jeweils

> 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

1
2017-09-09 20:50