Ich versuche, einen "Coupling to the past"-Algorithmus in Rcpp zu implementieren. Dafür muss ich eine Matrix mit Zufallszahlen speichern und, falls der Algorithmus nicht konvergiert, eine neue Matrix mit Zufallszahlen erstellen und diese auch speichern. Dies muss möglicherweise 10+ Mal oder öfter erfolgen, bis die Konvergenz erreicht ist.
Ich hoffte, dass ich eine Liste
verwenden und sie dynamisch aktualisieren könnte, ähnlich wie in R. Ich war tatsächlich sehr überrascht, dass es ein wenig funktioniert hat, aber ich habe Fehlermeldungen erhalten, wenn die Größe der Liste groß wird. Dies scheint sinnvoll zu sein, da ich nicht den nötigen Speicher für die zusätzlichen Listenelemente reserviert habe, obwohl ich mit C++ nicht so vertraut bin und nicht sicher bin, ob das das Problem ist.
Hier ist ein Beispiel von dem, was ich versucht habe. Seien Sie jedoch vorsichtig, denn dies wird wahrscheinlich Ihre R-Sitzung abstürzen lassen:
library("Rcpp")
cppFunction(
includes = '
NumericMatrix RandMat(int nrow, int ncol)
{
int N = nrow * ncol;
NumericMatrix Res(nrow,ncol);
NumericVector Rands = runif(N);
for (int i = 0; i < N; i++)
{
Res[i] = Rands[i];
}
return(Res);
}',
code = '
void foo()
{
// Dies ist der relevante Teil. Ich erstelle eine Liste, aktualisiere sie dann und drucke die Ergebnisse aus:
List x;
for (int i=0; i<10; i++)
{
x[i] = RandMat(100,10);
Rf_PrintValue(wrap(x[i]));
}
}
')
foo()
Weiß jemand einen Weg, dies zu tun, ohne dass R abstürzt? Ich denke, ich könnte die Liste hier mit einer festen Anzahl von Elementen initialisieren, aber in meiner Anwendung ist die Anzahl der Elemente zufällig.