Domanda

Ho usato RCPP e Rinside, per integrare R e C ++. Abbiamo un'architettura C ++ complessa, ma ben progettata e trovo difficile accedere a R da una sola funzione. È possibile passare il R istanza a diverse classi / funzioni, per ottenere un design più OOP? Se sì, ci sono esempi?

Per elaborare la query, voglio dire che qualcosa del genere,

void foo(RInside& R0, int& x0)
{
 R0.assign(x0,"totalSum");
}
void foo2(RInside& R0, int& y0)
{
  R0.assign(y0,"temp");
   R0.parseEvalQ("totalSum = totalSum + temp"); 
 }
int main(int argc, char *argv[])
{   
  RInside R(int argc, char *argv[]);
  int x=10, y = 11;
  foo(R,x);
  foo2(R,y);
  return 0;
}

Quello che sto attualmente notando è che ogni chiamata a Foo, probabilmente crea una nuova istanza di Rinside.

Grazie - Egon

È stato utile?

Soluzione

Sì, e come ho scritto prima al Elenco RCPP-Devel (che dovresti seguire se ti interessa RCPP e Rinside) Ho appena aggiunto un esempio a Rinside che lo incorpora dentro Qt.

Istantiate r in main() e quindi passare un riferimento a questo oggetto alla classe usandolo. Sembra un modello adeguato in quanto dobbiamo assicurarci che sia in esecuzione solo un'istanza R (senza che R non sia multithread ecc.-Se hai bisogno di più istanze, considera Rserve.

Questo esempio è ora in SVN E sembra così sulla mia scatola:

enter image description here

Mi piace molto perché ti consente di giocare con le miscele, diffondere la posizione centrale di entrambi i disegni ecc. E vedi a quale larghezza di banda non si differenzi più tra due gobbe della densità stimata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top