【发布时间】:2017-01-11 00:55:42
【问题描述】:
我有一个 Fortran 子例程,它在调用中使用可选参数。
subroutine data (n,ns,alpha,covmat,x,y)
integer, intent(in):: n,ns
double precision, intent(in) :: alpha
double precision, intent(in), optional ::covmat(n,ns)
double precision, intent(out) :: x(n),y(n)
....
end subroutine data
我为此子例程尝试了以下 R 包装器并收到一条错误消息:
Error in array(x, c(length(x), 1L), if (!is.null(names(x))) list(names(x), :
'data' must be of a vector type, was 'NULL'
我不确定我是否在 .Fortran() 调用中正确传递了参数。我在网上找不到任何有用的东西。
data1 <- function(n,ns,alpha,covmat=NULL){
tmp <- .Fortran("data",
n = as.integer(n),ns= as.integer(ns)
alpha=as.numeric(alpha),covmat=as.vector(covmat),
x=as.double(rep(0,n)),y=as.double(rep(0,n)))
)
}
result <- list(x=tmp$x, y=tmp$y)
return(result)
}
【问题讨论】:
-
“它没有用”是什么意思?永远不要在问题中使用这个短语,它没有任何意义。它是否返回了一些价值?哪个值?它打印了什么吗?它崩溃了吗?有任何错误信息吗?
-
@VladimirF:感谢您的评论。我将在下一篇文章中记住这一点。收到一条错误消息:“数组错误(x,c(长度(x),1L),if(!is.null(names(x)))list(names( x), : 'data' 必须是向量类型,为 'NULL'"。
-
您可以编辑您的帖子以包含此信息。
-
@VladimirF:当然。
标签: r fortran wrapper gfortran