我有以下Fortran子程序:
function destroyer (arr) {
// You can use slice to grab all arguments after the first index in arguments
var args = Array.prototype.slice.call(arguments, 1);
return arr.filter(function (item) {
// filter anything not found in the arguments list
// indexOf will return -1 if not found
return args.indexOf(item) < 0;
});
}
我可以编译它为R加载并运行它。但是没有得到一个阵列,我得到一个数字。
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
我做错了什么?!
我的输出看起来像
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版本是:
$d
[1] 1
$i
[1] 2
$nMCd
NULL
$DF
A1 A2 B1 B2
11 12 21 22
$X
[1] 22
答案 0 :(得分:2)
我还没弄明白这应该做什么,因为我没有在FORTRAN中编程(而且你没有用我所读的语言说出你所期望的),但这是提供输入对象第一列中项目总和的实验,当我用输入查看代码时可能会有所帮助。似乎有可能从1
发送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
进一步的实验,仍然不知道Fortran,尝试将第一行中的项目一起添加:
X = DF(d,:)+DF(d,:)
制作人:
$X
[1] 22 42 0 0