Hi,

My function test is properly declared in the header file of the code:

void test(Model *);

and we just discovered yesterday we should be using .Call instead ,of .C.
However we still can't get it to work. We arent trying to pass a primitive
type from R but a complex one. We are trying to interface R with a C shared
library, which is already written. Can structs be defined in R and passed to
C and returned (by reference obviously). We don't really want to pass a list
rather a struct, so would a frame be a better idea?

This seems like it should be possible in R...(sorry I dont have much
experience in linking C and R together)

Nathan

2008/5/14 Ramon Diaz-Uriarte <rdiaz02@gmail.com>:

> Dear Nathan,
>
> How is you C function "test" defined? What type of argument is it
> expecting? The mappings between R and C type of arguments you can pass
> is explained in:
>
>
> http://cran.r-project.org/doc/manuals/R-exts.html#Interface-functions-_002eC-and-_002eFortran
>
> which also provides some examples. If you want to pass a list, you'll
> probably have to use .Call, not .C.
>
> HTH,
>
> R.
>
>
>
> On Tue, May 13, 2008 at 1:51 PM, Nathan Harmston
> <iwanttobeabadger@googlemail.com> wrote:
> > Hi everyone,
> >
> >  I am currently trying to call some C code from R, specifically calling
> a
> >  function which populates a C struct.
> >
> >  typedef struct{
> >    // contents
> >  } Model;
> >
> >  void test(Model *m){
> >    // fill the struct with crap
> >  }
> >
> >  I compile the C code into a shared library, which loads into R
> properly. My
> >  simple test functions work (i.e adding numbers etc)
> >  setModel <- function(){
> >    model<-vector("list", 6)
> >    name(model) <- c( SET THE NAMES OF THE MODEL HERE )
> >    model
> >  }
> >  t <- setModel()
> >  testcode <- function(setModel){
> >
> >
> >  dyn.load("Simulation.so")
> >
> >  foo <- .C("test", Model=setModel)
> >  foo
> >  }
> >
> >  testcode(t)
> >
> >  However I get segfaults whenever I try to access any of the variables
> >  contained in Model. So my question is: am I doing something wrong here?
> Is
> >  list the right data type to wrap a structure in? I cant see any
> >  documentation about wrapping structs in R.
> >
> >  Also when I pass strings to C from R they dont seem to be passed at
> all? Is
> >  this a problem with R or a problem with me and if so how do I fix it?
> >
> >
> >
> >  Many Thanks in advance,
> >
> >  Nathan
> >
> >         [[alternative HTML version deleted]]
> >
> >  ______________________________________________
> >  R-help@r-project.org mailing list
> >  https://stat.ethz.ch/mailman/listinfo/r-help
> >  PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> >  and provide commented, minimal, self-contained, reproducible code.
> >
>
>
>
> --
> Ramon Diaz-Uriarte
> Statistical Computing Team
> Structural Biology and Biocomputing Programme
> Spanish National Cancer Centre (CNIO)
> http://ligarto.org/rdiaz
>

	[[alternative HTML version deleted]]

