Thank you for the answer. However, I sought in Doc. Writing R extensions, in particular in the paragraph 5.6 "Calling C from FORTRAN and vice versa" (page 67) but I did not find anything which could help me to correct my code. Indeed, rmultinom.c is a particular function since arrays are passed in arguments. Has somebody ever written a wrapper for this function?
Thanks in advance, Sophie. At 17:06 20/01/06 +0000, Prof Brian Ripley wrote: >All arguments to functions called from C by Fortran are pointers >(or should be: yours are not). The error is within your own code. > >You don't want to call rndstart and rndend around every call, only before >the first and after the last. > >This is not the list for advice om mixed Fortran/C programming, though. >On Fri, 20 Jan 2006, Sophie Ancelet wrote: > >> >> Hi, >> >> I'm simulating a Markov chain in Fortran interfaced with R-2.2.1 in order >> to generate data according to a Markov Random Field called the Potts model. >> >> R Version: >> platform i686-pc-linux-gnu >> arch i686 >> os linux-gnu >> system i686, linux-gnu >> status >> major 2 >> minor 2.1 >> year 2005 >> month 12 >> day 20 >> svn rev 36812 >> >> >> >> >> Each loop of my Fortran calls the function rmultinom.c of the R's Random >> Number Generator through the wrapper: >> >> #include <R.h> >> #include <Rmath.h> >> void F77_SUB(sarmultinom)(int n, >> double* prob, >> int K, >> int* rN){ >> rmultinom(n, prob, K, rN);} >> >> >> >> My fortran program is: >> >> subroutine testsarmultinom(n,prob,K,rN) >> implicit none >> integer n,K,rN(K) >> double precision prob(K) >> >> call rndstart() >> call sarmultinom(n,prob,K,rN) >> call rndend() >> end >> >> >> In order to understand better how the function rmultinom.c works, I have >> written an R code which calls this fortran subroutine as follows: >> >> system("R CMD SHLIB test-multinom.f wrapper.c") >> dyn.load("~/Package/test/test-multinom.so") >> >> n=1 >> prob=c(0.6,0.1,0.3) >> K=3 >> rN=c(1,0,0) >> res<- .Fortran("testsarmultinom", >> as.integer(n), >> as.double(prob), >> as.integer(K), >> as.integer(rN)) >> >> >> Unfortunately, I have some trouble with the results. First, this command >> always returns 0 values. In other words, I always get: >> >>> res[[4]] >> [1] 0 0 0 >> >> >> Moreover, if I run this R code a second time, an error message appears: >> Segmentation fault. >> >> Has somebody ever used rmultinom.c and encountered these problems? My code >> must be wrong but I don't know where. In this case, what is the correct way >> to call the C function rmultinom.c? >> >> Thanks in advance, >> >> Sophie. ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel