From rdiaz02 at gmail.com  Sat Apr 26 11:32:38 2008
From: rdiaz02 at gmail.com (Ramon Diaz-Uriarte)
Date: Sat, 26 Apr 2008 11:32:38 +0200
Subject: [Rd] returning vectors of unknown size from C (with .C)
In-Reply-To: <4812831D.5070100@stats.uwo.ca>
References: <624934630804251723n2e6b6345gc1678297e9412d34@mail.gmail.com>
	<4812831D.5070100@stats.uwo.ca>
Message-ID: <624934630804260232h4afee17ckfbb1ecc0c88112d4@mail.gmail.com>

On Sat, Apr 26, 2008 at 3:19 AM, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
> Ramon Diaz-Uriarte wrote:
>
> > Dear All,
> >
> > In a package, I am using ".C" to call some C functions. In one case,
> > the number of elements of the return vectors are not known in R before
> > the C call. (Two of the vectors are integers, the third is vector of
> > character strings).
> >
> > Passing from R a vector of the maximum possible size would be a huge
> > waste. I understand one alternative is to use ".Call", but I'd rather
> > avoid it if I can (all of the code seems working except for the return
> > of values into R). Another would be to write to a file from C and then
> > read that into R, but this looks very ugly. Are there any other
> > reasonable alternatives, or should I just use .Call?
> >
> >
>
>  .Call is usually easiest, but another possibility is to have two entry
> points:  one to calculate how much space you need, a second to pass in a
> vector that's the right size to hold the result.
>


You mean making two successive calls to the C code? The problem is
that the size of the result is not known until the result is obtained
(in my C code, the underlying structure is a linked list that gets
stretched as needed as the computation proceeds). So I would not know
"where to leave the result from C" in between the two calls to C.

Best,

R.




>  Duncan Murdoch
>
> > Thanks,
> >
> > R.
> >
> >
> >
> >
> >
>
>



-- 
Ramon Diaz-Uriarte
Statistical Computing Team
Structural Biology and Biocomputing Programme
Spanish National Cancer Centre (CNIO)
http://ligarto.org/rdiaz



[Rd] returning vectors of unknown size from C (with .C)
Ramon Diaz-Uriarte