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