2011-12-22 15 views
5

Ho bisogno di eseguire funzioni statistiche da R all'interno del mio codice C++. C'è un modo per chiamarli dal mio codice C++? Sto usando VS 2005, ho bisogno di includere qualsiasi file di intestazione o collegare qualsiasi libreria? Ho installato R utilizzando il programma di installazione standard di Windows fornito dal loro sito web.Chiamare le funzioni R da VC++

saluti,

+2

ho trovato questo, che sembra essere molto promettente EDIT http://dirk.eddelbuettel.com/code/rcpp.html: Questo è chiamare C++ da R, bum :(EDIT: Wait! Ho trovato qualcosa http://dirk.eddelbuettel.com/code/rinside.html :) :) –

+0

Grazie Carl, ho già controllato Rcpp e RInside, ma non danno abbastanza dettagli per lavorare con VS. Speravo che ci fosse qualcuno là fuori che usava R con VS e può dirmi cosa fare. – Jawad

+0

Forse questo potrebbe gettare luce http://www.google.co.uk/url?sa=t&rct=j&q=r%20%2Bc%2B%2B&source=web&cd=9&ved=0CGAQtwIwCA&url=http%3A%2F%2Fwww .youtube.com% 2Fwatch% 3Fv% 3DUZkaZhsOfT4 & ei = 403zTtmxIabh4QTOr7mSCA & usg = AFQjCNGcDNvkB9SwhMsMRj20BvcTYsutCQ –

risposta

4

Brevemente:

  • Come si è detto abbastanza frequentemente, R stesso non costruisce sotto VS * rendendo il collegamento di codice C duro-but-possibile e C++ codice impossibile (poiché le informazioni dell'intestazione della funzione non sono standardizzate).

  • Sia Rcpp che RInside funzionano perfettamente su Windows, data la toolchain di Windows standard . (RInside avuto un bug, ma questo è ora risolto.)

    Il Rcpp FAQ ha più da dire su VS * (vale a dire che non si può pretendere questo a lavorare se R per sé non può funzionare con il compilatore)

  • Se si usa utilizzare VS *, la soluzione migliore potrebbe essere l'accoppiamento più flessibile tramite rete e utilizzando Rserve.

    Se è possibile passare ai compilatori, è possibile che Rcpp/RInside sia interessante; e il resto dell'API R è anche a vostra disposizione.

  • Rcpp et al hanno una documentazione abbondante, incluso un pdf di introduzione Rcpp (che è anche l'articolo peer-reviewed ) e le summenzionate domande frequenti su Rcpp --- nonché una mailing list dedicata.

E per favore non cross-post. Ho anche appena risposto a questo on r-help.

+0

Grazie Dirk, ho appena ricevuto la risposta anche su r-help. Credo che dovrò usare qualcosa di diverso da R allora. – Jawad

+5

... o qualcosa di diverso da Microsoft. –

-1

La versione binaria di Rserve come fornita su https://rforge.net/Rserve/files/ non viene creata in Microsoft Visual C++. Nel file ReadMe.txt, l'autore indica che non c'è alcuna configurazione per Windows, ma c'è uno speciale Makefile.win. Non abbiamo avuto successo nel costruirlo, usando "make -f Makefile.win", poiché non è fornito alcun file config.h (solo config.h.in).

  1. Così, commentare la seguente riga nel file di intestazione Rsrv.h:


    // # include "config .h"


In questa fase , viene generato il seguente errore:


rsrv .h (384): errore irreversibile C1189: errore #: "Impossibile determinare l'endianness. Assicurati che la configurazione sia inclusa o _ _ {BIG | PICCOLO} _ENDIAN__ è definito."


  1. risolvere i problemi legati alla endianness. Nel file di intestazione Rsvr.h, sostituire:

/* Windows is little-endian is most cases, anywhere else we're stuck*/ 
# error "Cannot determine endianness. Make sure config.h is included or __{BIG|LITTLE}_ENDIAN__ is defined ." 
# endif 

da:


/********* MODIFICATION *************/ 

/* # error "Cannot determine endianness. Make sure config.h is included or __{BIG|LITTLE}_ENDIAN__ is defined ." */ 
/************************************/ 
#define _BIG_ENDIAN (*(uint16_t *)?\xff? < 0x100) 

  1. Assicurarsi che i collegamenti di ambiente di generazione a il file Winsock Library Ws2_32.lib. Per fare questo, aggiungere le seguenti righe di codice prima che la funzione principale:

/* indicate to the linker that the Ws2_32.lib file is needed */ 
#pragma comment(lib, "Ws2_32.lib") 

Le applicazioni che utilizzano Winsock deve essere collegato con il file di libreria Ws2_32.lib.

Per maggiori dettagli su R e Microsoft l'integrazione di Visual C++ tramite Rserve, visitare https://www.researchgate.net/publication/305789407_Rserve_for_Windows_case_of_R_and_Microsoft_Visual_C_integration

+0

Benvenuti in Stack Overflow! Mentre questo può teoricamente rispondere alla domanda, [sarebbe preferibile] (// meta.stackoverflow.com/q/8259) per includere qui le parti essenziali della risposta e fornire il link per riferimento. –

Problemi correlati