[Rd] Problems when linking to R shared library
John Maddock
john at johnmaddock.co.uk
Thu May 31 20:04:25 CEST 2007
Folks,
I'm fairly sure that I'm doing something stupid, but I'm getting a few
really strange results from *some* of the distributions, but by no means
all,
when I link directly to the R shared library.
I've tried this on both Windows with the precompiled Mingw binary of R-2.5.0
(compiling my code with MinGW-3.4.2), and by building R-2.5.0 on Mandriva
Linux with gcc-3.4.4 and --enable-R-shlib. The actual code is at the end of
the message, but the main cases are:
std::cout << pf(1.5, 2.0, 3.0, 1, 0) << std::endl;
Outputs 1, expect 0.646447
std::cout << pchisq(1.5, 2.0, 1, 0) << std::endl;
Outputs 1, expect 0.527633
std::cout << pgamma(1.5, 2.0, 3.0, 1, 0) << std::endl;
Outputs 1, expect 0.090204
std::cout << ppois(2.0, 5.0, 1, 0) << std::endl;
Outputs 0, expect 0.124652
std::cout << qchisq(0.5, 2.0, 1, 0) << std::endl;
Outputs -0.61379, expect 1.38629
std::cout << qgamma(0.5, 2.0, 3.0, 1, 0) << std::endl;
Outputs 0.0282703, expect 5.03504
I should stress that within the R environment, I *do* get the values I
expect: though sometimes the arguments need adjusting as the C functions
have slightly different argument lists from the R versions.
Also:
std::cout << qpois(0.5, 5.0, 1, 0) << std::endl;
Seems to go into an infinite loop inside qpois, while:
qbeta(0.1, 1e-5, 1e-5, 1, 0);
Raises an access violation inside R: although I should stress that all other
beta quantiles I've tested come out OK.
Anyway, hopefully you can just tell me what an idiot I am :-)
Thanks in advance for any help you can give,
John Maddock.
The complete source code is:
#include <iostream>
#include <iomanip>
extern "C" {
#include "Rmath.h"
}
int main(int argc, const char** argv)
{
std::cout << pf(1.5, 2.0, 3.0, 1, 0) << std::endl;
std::cout << pchisq(1.5, 2.0, 1, 0) << std::endl;
std::cout << pgamma(1.5, 2.0, 3.0, 1, 0) << std::endl;
std::cout << ppois(2.0, 5.0, 1, 0) << std::endl;
std::cout << qchisq(0.5, 2.0, 1, 0) << std::endl;
std::cout << qgamma(0.5, 2.0, 3.0, 1, 0) << std::endl;
//std::cout << qpois(0.5, 5.0, 1, 0) << std::endl;
return 0;
}
More information about the R-devel
mailing list