Dear R-devel,
 
Apologies for sending what is probably a very simple question to R-devel: I am 
definitely missing something very simple and can't work out what it is. I've 
been trying to find the problem here for about a month and need some help!
 
I am trying to work out how to run a C program from an R script. Rather than 
try the C program directly, I'm trying to get a much simpler piece of code to 
work as a proof-of-concept. Here's the C code (simplecall.c):
 
***********************************************************************************************
#include <stdio.h>
#include <Rinternals.h>
#include <R_ext/Rdynload.h>

int Rc(int a) {
 return (a+3);
}

SEXP Rc2(SEXP a) {
 return(18); //LINE A
// return(ScalarReal(REAL(a)[0]+12)); //LINE B
}

int main()
{
 int i,j;
 SEXP m,n;

 i=4;j=Rc(i);
 printf("\nUsing Rc: %i+3=%i - OK so far.\n",i,j);

 m=6;n=Rc2(m);
 printf("\nUsing Rc2: %i+12=%i - Doing well.\n",m,n);

 printf("\nPress <ENTER> ...\n");
 getchar();
 return 0;
}
***********************************************************************************************

and I've compiled this (using the only C compiler I have, which is a Borland 
C++ Builder which insists on calling the executable "Project.exe"). I managed 
to get it to compile correctly with the two R includes at the front and the two 
functions work OK when I run the C executable.
What I want to do is access these functions from R, however. Here's the R code 
I've written (simplecall.r), which I've put together from various websites and 
guesses:

***********************************************************************************************
dll=dyn.load("Project1.exe")
syms=getNativeSymbolInfo(c("Rc","Rc2"),dll)

RcInR=function(x) {
 .Call(dll$Rc,as.numeric(x))
}

Rc2InR=function(x) {
 .Call(dll$Rc2,as.numeric(x))
}

i1=4;j1=Rc(i1)
cat("\nUsing Rc from R: ",i1,"+3=",j1," - OK so far.\n")

m1=6;n1=Rc2(m1)
cat("\nUsing Rc2 from R: ",m1,"+12=",n1," - Doing well.\n");

***********************************************************************************************

Basically, there are two problems (at least!). If I have LINE A in the C code 
instead of LINE B then it compiles alright, but if I try to run the R script it 
says:

Error in FUN(c("Rc", "Rc2")[[1]], ...) : no such symbol Rc in package 
C:/Documents and Settings/Toby/Desktop/cfiles/Project1.exe

I've read a lot online about the "R CMD INSTALL" command and the ?INSTALL man 
page, but I can't use that command because I've got Windows-R rather than 
Linux-R (unfortunately). Somehow, R can't 'see' these C functions in the 
executable, even though I thought including Rinternals.h ensured that it could. 
Stuck.

Additionally, if I have LINE B instead of LINE A in the C code then it won't 
compile at all and gives the errors:

[Linker error] Unresolved external '_REAL' referenced from C:\DOCUMENTS AND 
SETTINGS\TOBY\DESKTOP\CFILES\SIMPLECALL.OBJ
[Linker error] Unresolved external '_Rf_ScalarReal' referenced from 
C:\DOCUMENTS AND SETTINGS\TOBY\DESKTOP\CFILES\SIMPLECALL.OBJ

which I find odd because these symbols are defined in the .h files included at 
the start.

I feel like I'm either a) trying to do this in completely the wrong way or b) 
suffering from having to use a Windows machine or c) both. I tried setting up a 
package and inserting the code in the /src directory, but because I can't use 
the R CMD INSTALL command I can't figure out how to make this idea work either.

Can anyone help me here? Does anyone have an actual example of something like 
this that works?

Toby Marthews

·..¸¸·´¯`····..¸¸·´¯`··..¸¸·´¯`·.¸¸·´¯`··..¸¸·´¯`··..¸¸·´¯`·.¸

Institut für Umweltwissenschaften (IfU, www.uzh.ch/uwinst 
<http://www.uzh.ch/uwinst> ),
Universität Zürich, Winterthurerstr. 190, 8057 Zürich, CH.

Plant & Soil Science Department (www.abdn.ac.uk/biologicalsci/pss 
<http://www.abdn.ac.uk/biologicalsci/pss> ),
University of Aberdeen, 23 St Machar Dr., Aberdeen AB24 3UU, UK.

¯`··..¸¸·´¯`·.¸¸·´¯`··..¸¸·´¯`··..¸¸·´¯`·.¸ ><(((º> ¸.·´¯`·..¸ ><(((º>

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to