.Fortran()不返回任何结果
在R中,当我尝试以下代码时.Fortran()不返回任何结果,r,fortran,R,Fortran,在R中,当我尝试以下代码时 .Fortran("add", x= as.double(2),y= as.double(3)) R只返回参数,但没有返回结果 $x [1] 2 $y [1] 3 add是我在Fortran源文件test.f90中编写的唯一简单函数: function add (x,y) result (f_result) real:: x,y,f_result f_result = x+y end function add 我用了: gfortran
.Fortran("add", x= as.double(2),y= as.double(3))
R只返回参数,但没有返回结果
$x
[1] 2
$y
[1] 3
add是我在Fortran源文件test.f90中编写的唯一简单函数:
function add (x,y) result (f_result)
real:: x,y,f_result
f_result = x+y
end function add
我用了:
gfortran -shared -o test.dll test.f90
获取由加载到R中的test.dll
dyn.load("test.dll")
在所有上述过程中,我没有收到任何错误或警告消息。所以我就是不知道问题出在哪里。我找了很多,但找不到解决办法。有什么帮助吗
顺便说一下,我使用windows7x86、R3.0.2、GNU Fortran GCC 4.7.0编写一个子例程,使用一个参数作为返回值:
subroutine add(x,y,z)
real*8 x,y,z
z=x+y
end
编译如下:
$ R CMD SHLIB add.f
> dyn.load("add.so")
> .Fortran("add",as.double(1),as.double(2),as.double(-999))
[[1]]
[1] 1
[[2]]
[1] 2
[[3]]
[1] 3
您甚至不需要命名参数,但这很有帮助,因为您可以按名称获取返回值:
> .Fortran("add",as.double(1),as.double(2),ans=as.double(-999))$ans
[1] 3
>
从中,请注意,编译后的代码不应返回任何内容,除非通过其参数返回:C函数应为void类型,FORTRAN子程序应为子例程