2014-03-05 159 views
-4

在R,當我嘗試下面的代碼.Fortran()返回任何結果

.Fortran("add", x= as.double(2),y= as.double(3)) 

[R僅返回論點,但沒有結果!

$x 
[1] 2 
$y 
[1] 3 

add是唯一的簡單函數I寫入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 

以獲得加載到test.dll R通過

dyn.load("test.dll") 

在上述所有流程中,我沒有收到任何錯誤或警告消息。所以我無法弄清楚問題出在哪裏。我搜查了很多,但找不到解決方案。任何幫助?

順便說一句,我用的windows7(X86),R3.0.2,GNU的Fortran(GCC)4.7.0

+2

出自[編寫R擴展,第5.2節](http://cran.r-project.org/doc/manuals/R-exts.html#Interface-functions-_002eC-and-_002eFortran),「請注意,編譯後的代碼不應該返回任何東西,除非通過它的參數:C函數應該是void類型,FORTRAN子程序應該是子例程。「 –

+0

同時發佈添加功能 – Peter

回答

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 
>