[R] Modifying Internal C Files

Duncan Murdoch murdoch at stats.uwo.ca
Mon Nov 7 23:30:32 CET 2005


On 11/7/2005 5:17 PM, Ken Kelley wrote:
> Hi All.
> I want to tweak a few minor things inside of internal C code. I have my 
> Win. XP machine set-up to build packages (including C code), but I'm 
> having problems getting the package to run correctly. In particular, I 
> want to modify a few things inside of pnbeta.c (namely errmax and 
> itrmax), which is what the pbeta() function calls upon when there is a 
> noncentral parameter. I copied the pnbeta.c C code, changed its name [to 
> pnbeta2.c], included the nmath.h, dpq.h files, lgamma.c, and pbeta.c in 
> my src folder (since the .h files were called upon and the .c files 
> were). I then created an R function that I thought would call upon the 
> new C code:
> 
> pnbeta2 <- function(x, a, b, lambda, low.tail, log.p)
> {
> res <- .C("pnbeta2", as.double(x), as.double(a), as.double(b), 
> as.double(lambda), as.integer(low.tail), as.integer(log.p))
> return(list(res))
> }
> 
> But after I built the package and loaded it it, the function doesn't 
> work (it isn't even recognized). I have no idea why this is failing. Any 
> information to help me figure out what I need to do to modify internal C 
> code generally, or specifically as it applies to this scenario would be 
> most helpful.

You didn't say that you changed the name of the function, only the file 
that contained it.  If this wasn't an oversight, then you should put

double pnbeta2(double x, double a, double b, double lambda,
	      int lower_tail, int log_p)

in the appropriate place in your pnbeta2.c file.

The other thing you should do is to add a PACKAGE argument to your .C 
call, just in case there is already a pnbeta2 function somewhere else 
(or will be some day).  In fact, if you do this, there should be no need 
to change the name of the function:  R will look in the package DLL 
rather than R.dll to find it.  Just make sure that the name in the .C 
call matches the declared name in the source.

Duncan Murdoch




More information about the R-help mailing list