[R] Problem with length of array while calling C from R
Martin Maechler
maechler at stat.math.ethz.ch
Tue Apr 24 15:30:29 CEST 2007
>>>>> "Sven" == Sven Knüppel <sven.knueppel at reilich.net>
>>>>> on Tue, 24 Apr 2007 13:53:09 +0200 writes:
Sven> Hello,
Sven> my problem is that I don't know how long must be an array of double while calling C from R.
Sven> R-Code:
>> array <- c(1,1,1)
>> save <- .C ( "Ctest" , a = array )
Sven> C-Code: void Ctest ( double *array ) { ... array =
Sven> (double*) realloc ( array , new_number *
Sven> sizeof(double) ) ; ... }
Sven> The length of "array" will be compute in C.
Sven> At the end save$a has a length of 3 and not the length of the allocated array in C.
Sven> What can I do?
Either you learn to use .Call() where you pass whole R
objects, and can use length(.) on them in your C code,
or, simpler in this case, but much less powerful in general,
you change your R code to
ss <- .C("Ctest", a = myarray, n = length(myarray))
and the C code to
void Ctest (double *array, int *n) {
.........
}
and then make use of *n inside the C code.
Martin Maechler, ETH Zurich
More information about the R-help
mailing list