R from C — Simplest Possible Helloworld

后端 未结 4 1893
甜味超标
甜味超标 2020-11-30 00:47

What is the simplest possible C function for starting the R interpreter, passing in a small expression (eg, 2+2), and getting out the result? I\'m trying to compile with Mi

4条回答
  •  生来不讨喜
    2020-11-30 01:21

    Here you go. It's the main function, but you should be able to adapt it to a more general purpose function. This example builds an R expression from C calls and also from a C string. You're on your own for the compiling on windows, but I've provided compile steps on linux:

     /* simple.c */
     #include 
     #include 
     #include 
     int
     main(int argc, char *argv[])
     {
        char *localArgs[] = {"R", "--no-save","--silent"};
        SEXP e, tmp, ret;
        ParseStatus status;
        int i;
    
        Rf_initEmbeddedR(3, localArgs);
    
        /* EXAMPLE #1 */
    
        /* Create the R expressions "rnorm(10)" with the R API.*/
        PROTECT(e = allocVector(LANGSXP, 2));
        tmp = findFun(install("rnorm"), R_GlobalEnv);
        SETCAR(e, tmp);
        SETCADR(e, ScalarInteger(10));
    
        /* Call it, and store the result in ret */
        PROTECT(ret = R_tryEval(e, R_GlobalEnv, NULL));
    
        /* Print out ret */
        printf("EXAMPLE #1 Output: ");
        for (i=0; i

    Compile steps:

    $ gcc -I/usr/share/R/include/ -c -ggdb simple.c
    $ gcc -o simple simple.o  -L/usr/lib/R/lib -lR
    $ LD_LIBRARY_PATH=/usr/lib/R/lib R_HOME=/usr/lib/R ./simple
    EXAMPLE #1 Output: 0.164351 -0.052308 -1.102335 -0.924609 -0.649887 0.605908 0.130604 0.243198 -2.489826 1.353731
    EXAMPLE #2 Output: -1.532387 -1.126142 -0.330926 0.672688 -1.150783 -0.848974 1.617413 -0.086969 -1.334659 -0.313699
    

提交回复
热议问题