[R] Writing R package that call Fortran codes

Kodalore Vijayan, Vineetha W vwkv13 at mun.ca
Thu Jun 16 20:17:56 CEST 2016


Hi,

 Its running in R separately using dyn.load(). Thanks!

 But my original issue is still there. I still can not build my package. My
source code file name in SRC folder is "randomepi.f95" , the package name
is "NEpidemic". and the wrapper function in the R folder is "randomepi.r".
Not sure if I have to give the same file names.

$R CMD BUILD NEpidemic

> Error in library.dynam(lib, package, package.lib) :
   shared object ‘randomepi.so’ not found
   Error: loading failed

My namespace file has the following:

exportPattern("^[[:alpha:]]+")
export(randomepi)
useDynLib(randomepi)
import(graphics,grDevices,stats, utils)


Thanks,
Vineetha


On Thu, Jun 16, 2016 at 12:02 PM, Eduardo M. A. M.Mendes <
emammendes at gmail.com> wrote:

> Thanks  Bill for pointing this out.  I haven’t noticed it.
>
> Vineetha, try as.double(rep(0,n)) or as.matrix(rep(0,n)),
>
> Ed
>
> On Jun 16, 2016, at 2:54 PM, William Dunlap <wdunlap at tibco.com> wrote:
>
> >  1: .Fortran("dataxy", n = as.integer(n), tmax = as.integer(tmax),
>  alpha = as.double(alpha), beta = as.double(beta), x = as.double(0,
>  length = n), y = as.double(0, length = n), tau = as.integer(0,
>  length = n))
>
> Are you expecting that
>     as.integer(0, length=n)
> and
>     as.double(0, length = n)
> will produce vectors of length 'n'?  They do not and short inputs will
> usually
> cause memory misuse and crashes in the Fortran code.
>
>
>
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com
>
> On Thu, Jun 16, 2016 at 10:03 AM, Kodalore Vijayan, Vineetha W <
> vwkv13 at mun.ca> wrote:
>
>> Hi Eduardo,
>>
>>  Thanks for your comments. I haven't tried the way you told me. Now when I
>> tried, got the following error:
>>
>> *** caught segfault ***
>> address 0x0, cause 'memory not mapped'
>>
>> Traceback:
>>  1: .Fortran("dataxy", n = as.integer(n), tmax = as.integer(tmax),
>> alpha = as.double(alpha), beta = as.double(beta), x = as.double(0,
>> length = n), y = as.double(0, length = n), tau = as.integer(0,
>> length = n))
>>  2: out(NULL, NULL, NULL, NULL)
>>
>> Possible actions:
>> 1: abort (with core dump, if enabled)
>> 2: normal R exit
>> 3: exit R without saving workspace
>> 4: exit R saving workspace
>> Selection:
>>
>> Any suggestions?
>>
>> Thanks,
>> Vineetha
>>
>> On Wed, Jun 15, 2016 at 3:55 PM, Eduardo M. A. M.Mendes <
>> emammendes at gmail.com> wrote:
>>
>> > Hi
>> >
>> > Have you tried to load and run the fortran code using just a wrapper
>> > function in R?   I do that as the first step in order to build a
>> package.
>> >
>> > Example:   fortran sources -> rk4_mod_r.f90 ,derive_henonheilles.f90,
>> > poincare_section.f90
>> >
>> > a) I use R CMD SHLIB rk4_mod_r.f90 ,derive_henonheilles.f90,
>> > poincare_section.f90 - o poincare_section_henonheilles_rk4.so
>> > b) Then I write a wrapper function in R, poinc_section_henonheilles.R
>> > ...
>> >  dyn.load("poincare_section_henonheilles_rk4.so")
>> >
>> >   out<-.Fortran("section_crossing",
>> >                 h=as.numeric(h),
>> >                 nphas=as.integer(nphas),..
>> > ...
>> > c) and call the function as usual.
>> >
>> > Please note that the function called by .Fortran is the name of the
>> > subroutine within poincare_section.f90 and not the filename.
>> >
>> > I take the opportunity to thank R-developers for making the calling of C
>> > and Fortran in R very easy.
>> >
>> > I hope this helps.
>> >
>> > regards
>> >
>> > Ed
>> >
>> > PS.  If you need an example of a package using Fortran90, please check
>> > https://github.com/emammendes/mittagleffler
>> >
>> >
>> >
>> > On Jun 15, 2016, at 5:20 PM, Kodalore Vijayan, Vineetha W <
>> vwkv13 at mun.ca>
>> > wrote:
>> >
>> > Hi,
>> >
>> > I'm trying to write an R package that calls a Fortran subroutine on my
>> Mac
>> > os x El Capitan with Xcode 7 and gfortran 6.1, R 3.3.0.   I can build
>> and
>> > load the library but when I try to use it in R I get this error:
>> >
>> > library(NEpidemic)
>> > random_epi(variable_names)
>> >
>> >
>> > Error in .Fortran("random_epi", : "random_pi" not resolved from current
>> > namespace (NEpidemic).
>> >
>> > Then I  tried adding useDynLib(random_epi.f95) in the NAMESPACE file,
>> > additional to useDynLib(NEpidemic). After doing that I couldn't build
>> the
>> > package and it gave me another error:
>> >
>> > Error in library.dynam(lib, package, package.lib) :
>> >  shared object ‘random_epi.so’ not found
>> > Error: loading failed
>> > Execution halted
>> > ERROR: loading failed
>> >
>> > When I checked my src folder, there is only random_epi.o file.  How can
>> I
>> > fix this issue? Any help would be much appreciated. I'm vey new to both
>> R
>> > and Fortran coding, especially in package building.
>> >
>> > Thanks in advance!
>> > Vineetha
>> >
>> > [[alternative HTML version deleted]]
>> >
>> > ______________________________________________
>> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> > https://stat.ethz.ch/mailman/listinfo/r-help
>> > PLEASE do read the posting guide
>> > http://www.R-project.org/posting-guide.html
>> <http://www.r-project.org/posting-guide.html>
>> > and provide commented, minimal, self-contained, reproducible code.
>> >
>> >
>> >
>>
>>         [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> <http://www.r-project.org/posting-guide.html>
>> and provide commented, minimal, self-contained, reproducible code.
>
>
>
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list