在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 -shared -o test.dll test.f90
获取
加载到R中的test.dll
dyn.load("test.dll")
在上述所有流程中,我都没有收到任何错误或警告消息。所以我无法弄清楚问题出在哪里。我搜索了很多,但找不到解决方案。有什么帮助吗?
顺便说一句,我使用的是windows7(x86),R3.0.2,GNU Fortran(GCC)4.7.0
答案 0 :(得分:2)
编写子程序,使用参数作为返回值:
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
>