2016-09-02 18 views
0

私はコールでオプションの引数を使用するFortranサブルーチンを持っています。FortranサブルーチンからRラッパーにオプションの引数を渡す方法

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ラッパーを試してみましたが、エラーメッセージました:私は.Fortran()の呼び出しで正しく引数を渡すかどうかわからないんだけど

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' 

を。オンラインで役立つものは何も見つかりませんでした。

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) 
} 
+0

「それはうまくいかない」とはどういう意味ですか?質問でこのフレーズを使用しないでください。何も意味しません。それはいくつかの価値を返しましたか?どちらの価値?それは何かを印刷しましたか?それはクラッシュしましたか?エラーメッセージはありますか? –

+0

@VladimirF:コメントありがとう。私は次のポストのためにそれを念頭に置いています。エラーメッセージを表示します:「配列のエラー(x、c(length(x)、1L)、if(!isnn(names(x))) x)、: 'データ'はベクトルタイプで、 'NULL'だったはずです "。 – Vineetha

+0

あなたの投稿を編集してこの情報を含めることができます。 –

答えて

0

更新:= as.vector(covmat)をcovmatするcovmat = as.matrix(covmat)を変更した後のエラーメッセージがありません。

これまで私の質問で見つかった唯一の解決策は、.Fortran()コールのオプションの引数とともにフラグ変数を追加し、サブルーチンで両方を渡すことです。問題は今では 'n'オプションの引数のためです、私は 'この場合、より多くのフラグを持っています。その他の提案はありますか?

関連する問題