On Thu, 3 Feb 2005, Dan Lipsitt wrote:

I am trying to write a C function that reads lines from a file and
passes them back to R.

Please take a closer look at the posting guide, which clearly indicates this was the wrong list:


  Questions likely to prompt discussion unintelligible to non-programmers
  should go to to R-devel. For example, questions involving C, C++, etc.
  code should go to R-devel.

!!

Here is a simplified version:

--- C code ---

#include <R.h>
void read_file(char **filename, char **buf, char **buflen) {
 FILE *infile;

 infile = fopen(*filename, "r");
 fgets(*buf, *buflen, infile);
 fclose(infile);
}

--- R code ---

buffer = "xxxxxxxxxx"            # kludge!

read.file <- function(filename)
 .C("read_climate",
    as.character(filename),
    buf=buffer,
    buflen=as.integer(10))$buf

--- end code ---

This works okay, but the only way I could find to allocate a string
buffer of the size I want is to use a string literal as in the line
marked "kludge" above. It is impractical for large buffers, not to
mention uuuggly. I tried

buffer = paste(rep('x', 10), sep="")

Did you look at the result? You need 'collapse' not 'sep'.

but it doesn't work. So my question is, how do I do one of the following:

- Allocate a character buffer of a desired size to pass to my C routine.

Use paste(collapse=)

- Have the C routine allocate the buffer without causing a memory leak.

Use R's allocation routines discussed in `Writing R Extensions'.

- Use .Call() instead

Lots of examples in the R sources and package sources.

--
Brian D. Ripley,                  [EMAIL PROTECTED]
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to