与R

时间:2016-09-03 21:13:04

标签: r fortran

我在Fortran中处理实数时遇到了麻烦,我和R一起使用。下面的代码是用Fortran编写的:

Subroutine realtest(lol)
implicit none
Real lol
lol = 10.0
End

我使用命令R CMD SHLIB realtest.f进行编译。如果我在R中运行共享对象:

dyn.load("realtest.so")
res <- .Fortran("realtest",lol= as.numeric(1.2))

lol的结果值是1.2,但应该是10.如果我用整数做整件事,我得到正确的值10。

2 个答案:

答案 0 :(得分:3)

尝试使用double precision代替real;以下对我有用:

! realtest.f90
!
subroutine realtest(x)
    implicit none

    double precision, intent(inout) :: x
    x = 10.0
end subroutine realtest

来自R,

dyn.load("realtest.so") 
res <- .Fortran("realtest", x = as.double(1.2))
res
# $x
# [1] 10

答案 1 :(得分:-1)

您应该将lol声明为real*8,因为R使用双精度浮点数。