Secondo http://gallery.rcpp.org/articles/r-function-from-c++ Rcpp consente agli utenti di chiamare le funzioni R da C++. Esiste qualcosa di simile in Fortran in modo che le persone possano chiamare la funzione R nel codice Fortran ?Come chiamare le funzioni R da Fortran?
risposta
Credo che dovresti guardare RFortran? AFAIK è l'unico vincolo di Fortran degli oggetti R, in più è open source.
EDIT
Come per i commenti qui sotto, ero ignaro che RFortran era applicabile solo su Windows. Quindi, per una risposta più portabile creiamo un esempio in cui sfrutterò lo RInside che semplifica l'integrazione delle funzioni R in codice C++. Vorrei anche utilizzare il iso_c_binding
per interfacciarsi con C.
testC.cpp
#include <iostream>
#include <RInside.h>
void helloR_(int argc, char *argv[], const char *msg);
extern "C" void helloR(int argc, char *argv[], const char *msg) {
// create an embedded R instance
RInside R(argc, argv);
// convert to string for RInside assignment
std::string txt = std::string(msg);
// C++ Notice
std::cout << "This is C++, " << txt << std::endl;
// Assign string to R object
R.assign(txt, "txt");
// eval the string, give R notice
R.parseEvalQ("cat('This is R, ', txt, '\n')");
}
testF.f
PROGRAM MAIN
USE iso_c_binding
IMPLICIT NONE
INTEGER :: argc
CHARACTER(len=32) :: arg
CHARACTER(len=32) :: msg
INTERFACE
SUBROUTINE R_FUN(argc, arg, msg) bind(C, name="helloR")
USE iso_c_binding
INTEGER(kind=c_int), INTENT(IN) :: argc
CHARACTER(kind=c_char), INTENT(IN) :: arg(*)
CHARACTER(kind = C_CHAR), INTENT(IN) :: msg(*)
END SUBROUTINE R_FUN
END INTERFACE
print *, "Fortran Calling RInside"
CALL R_FUN (argc, arg, "Hello World"//C_NULL_CHAR)
END PROGRAM
La compilazione Fortran è semplice:
gfortran -c testF.f
Il C++ la compilazione è un po 'complicata dato che devi sapere dove sono le directory di inclusione R, Rcpp e RInside si trovano.
g++ testC.cpp -c -I/path/to/RInside/include -I/path/to/Rcpp/include -I/usr/share/R/include
Poi il collegamento è necessario fornire le librerie corrette e la bandiera lgfortran
.
g++ -o fcr testF.o testC.o -L/usr/lib/R/lib -lR -L/path/to/RInside/lib/ -lRInside -L/path/to/Rcpp/libs/ -Wl,-rpath,/home/path/to/RInside/lib/ -lRInside -Wl,-rpath,/path/to/Rcpp/libs/ -lgfortran
Ora ho un piccolo programma che dimostra come accedere formare funzioni R Fortran
./fcr
Fortran Calling RInside
This is C++, Hello World
This is R, Hello World
"COM è una tecnologia Microsoft, per questo motivo si è limitati a utilizzarlo solo su piattaforme Windows, anche se R esiste per Linux e altre piattaforme, non sarà possibile utilizzare RFortran su queste piattaforme poiché l'interfaccia COM non è presente. " –
COM è molto brutto, probabilmente è meglio interfacciare semplicemente Rcpp da Fortran. –
una soluzione generale è quello di scrivere i dati in un file da un programma Fortran, chiamare EXECUTE_COMMAND_LINE
(standard Fortran 2003) o qualcosa come SYSTEM
(un'estensione comune) per chiamare uno script R che scrive i risultati su un file e quindi per leggere quei risultati dal programma Fortran.
Poiché R è software libero ed è scritto in R, C e Fortran, può essere possibile tradurre il codice R in Fortran (entrambi sono linguaggi di array) o chiamare il codice C o Fortran direttamente dal programma Fortran.
Altrimenti, indagare è meglio chiamare Fortran (o C) da R come si troveranno molte più informazioni su questo approccio. Il sistema per farlo è abbastanza ben definito. Potrebbe essere che si possa fare il contrario, ma alcune cose devono essere inizializzate affinché R funzioni.
- 1. Chiamare le funzioni R da VC++
- 2. Passando funzioni in R come argomenti .Fortran
- 3. Come chiamare le funzioni Java da C++?
- 4. Funzioni FORTRAN
- 5. Chiamare una subroutine Fortran da Java
- 6. Chiamare le funzioni exe C++ da C#
- 7. Chiamare le funzioni membro da un costruttore
- 8. Chiamare le funzioni Javascript da un'applet Java
- 9. Funzioni di sovraccarico con Fortran
- 10. R & Fortran chiama
- 11. Come chiamare le funzioni da un file .eex
- 12. Calling Stata funzioni da R
- 13. argomenti opzionali nelle funzioni fortran
- 14. Chiamare le funzioni PHP remote da un'app per iPhone
- 15. Il modo migliore per chiamare le funzioni Haskell da Java
- 16. Come meglio chiamare le funzioni con firme di funzioni array in stile C99 da C++
- 17. Chiama le funzioni R dalle query sqldf
- 18. Dove chiamare le funzioni ini_set() nella classe?
- 19. Chiamare funzioni C da linguaggio assembly x86
- 20. Visual Lisp: come chiamare le funzioni in DLL C++ esterna
- 21. Come chiamare le funzioni di wordpress nello script php personalizzato
- 22. PHP: Come chiamare le funzioni della libreria standard
- 23. come chiamare le funzioni javascript dal controller nei binari
- 24. Come utilizzare le funzioni in un pacchetto R mascherato da un altro pacchetto?
- 25. Come chiamare lo script R da un altro script R, entrambi nello stesso pacchetto?
- 26. Scrivere un decoratore per le funzioni R
- 27. Quali sono le differenze tra le funzioni e le subroutine in Fortran?
- 28. Fortran per tutte le restrizioni
- 29. Come chiamare R da un server web (come Apache)?
- 30. Come chiamare le funzioni/metodi C++ tramite JavaScript
Stai cercando qualcosa oltre ciò che è stato fornito nelle risposte qui sotto? – cdeterman