r语言rep_R语言对接高级语言Fortran

本文介绍了如何在R语言中对接Fortran代码以提高性能。背景是由于Fortran的高性能和R语言的便捷性。对接过程包括创建R package、编写Fortran函数、注册到dll文件以及在R中调用。调试方法通过VSCode进行,并提供了一个名为movmean的示例项目,展示了对接多种语言的可能性。
摘要由CSDN通过智能技术生成

1 背景

为何要对接Fortran代码?(1)Fortran是当之无愧的性能之王,在本文的测试中可以看到Fortran代码的效率是Rcpp的2倍、Julia的4倍、python的30倍、R语言的90倍。在for循环密集的代码中,Fortran可以轻松达到R语言的200倍;(2)很多古老的、但专业上通用的模型采用Fortran语言编写,翻译成其他语言,人力所不能及。

为何对接到R语言?R语言代码简单,调试方便;准备模型的输入、输出数据便利;此外,R语言擅长统计分析和作图。这些fortran难以企及。因此如果能对接Fortran代码到R语言,可以集二者之所长,更高效率的使用模型和分析数据。

2 如何对接

2.1 新建R project

选择R package using devtools

一般选择R package对接Fortran代码,对接完成之后,不需要修改,直接适用于windows、Linux和mac操作系统。

2.2 编写Fortran函数

在此之前,需要安装Rtools(建议安装4.0版本,不用修改默认安装路径,直接放在C盘,仅占用1G左右空间,https://cran.r-project.org/bin/windows/Rtools/)。 高级编程语言(如c、c++、Fortran)的代码应放在src文件夹。
注意:(1)Fortran代码中real需要声明为REAL(8),因为R语言没有float类型的变量,否则会导致不可预知的错误。(2)需要加上 bind(C, name="movmean_f90_") ,其中 name 一般取原函数名+"_",否则R语言无法调用。这是规范,不需要理解原因。
! mo_movmean.f90
subroutine movmean_f90(x, halfwin, n, x_mov) bind(C, name="movmean_f90_")
INTEGER, INTENT(IN) :: halfwin
INTEGER, INTENT(IN) :: n
REAL(8) , dimension(n), intent(in) :: x
REAL(8) , dimension(n), intent(OUT) :: x_mov

i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值