Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.Fortran()不返回任何结果_R_Fortran - Fatal编程技术网

.Fortran()不返回任何结果

.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

在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")
在所有上述过程中,我没有收到任何错误或警告消息。所以我就是不知道问题出在哪里。我找了很多,但找不到解决办法。有什么帮助吗


顺便说一下,我使用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子程序应为子例程