Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
从子程序输出到R中获取n维Fortran数组?_R_Fortran_Gfortran - Fatal编程技术网

从子程序输出到R中获取n维Fortran数组?

从子程序输出到R中获取n维Fortran数组?,r,fortran,gfortran,R,Fortran,Gfortran,我有以下Fortran子程序: subroutine test(d, i, nMCd, DF, X) integer, intent(in) :: d, i, nMCd double precision, intent(in), dimension(i,nMCd) :: DF double precision, intent(out), dimension(i) :: X X

我有以下Fortran子程序:

subroutine test(d, i, nMCd, DF, X)
    integer, intent(in)                                 :: d, i, nMCd
    double precision, intent(in), dimension(i,nMCd)     :: DF
    double precision, intent(out), dimension(i)         :: X

    X = DF(:,d)+DF(:,d)

end subroutine test
我能够为R编译它、加载它并运行它。但是我得到的不是一个数组,而是一个数字

system("R CMD SHLIB ./Fortran/mytest.f90")
dyn.load("./Fortran/mytest.so")

input <- data.frame(A=c(11,12), B=c(21, 22))
.Fortran("test", d = as.integer(1), i = nrow(input), nMCd = ncol(input), DF = unlist(input), X = as.numeric(1))
此版本的R版本为:

input[,1]+input[,1]

我还没有弄清楚这应该做什么,因为我没有用FORTRAN编程(你也没有用我读过的语言说你期望的),但这是一个实验,它提供了输入对象第一列中的项目总和,当我查看带有输入的代码时,这可能会有一些意义。发送
1
for
d
以从
DF(:,d)+DF(:,d)
提取可能意味着您需要第一列的总和。请注意,我刚刚向X提供了一个空的4元素向量,并使其Fortran维度与DF相同:

文件中的源代码:

subroutine test(d, i, nMCd, DF, X)
    integer, intent(in)                                 :: d, i, nMCd
    double precision, intent(in), dimension(i,nMCd)     :: DF
    double precision, intent(out), dimension(i,nMCd)    :: X(i)

    X = DF(:,d)+DF(:,d)

end subroutine test
R代码:

input <- data.frame(A=c(11,12), B=c(21, 22))
.Fortran("test", d = as.integer(1), i = nrow(input), nMCd = ncol(input),
                      DF = unlist(input), X = numeric(4))
#--- result------
$d
[1] 1

$i
[1] 2

$nMCd
[1] 2

$DF
A1 A2 B1 B2 
11 12 21 22 

$X
[1] 22 24  0  0
制作:

 $X
 [1] 22 42  0  0

您的输出是什么样子的?as.numeric()看起来可疑。@VladimirF我把它添加到了我的任务中。我添加了R版本。您的解决方案有效,我只需将
4
更改为
nrow(输入)
谢谢!
  X = DF(d,:)+DF(d,:)
 $X
 [1] 22 42  0  0