0

bdiagRのパッケージ内の関数を使用してMatrix対角行列を生成し、結果の行列(と呼ばれるmat)を自己記述関数に渡しますが、次のエラーのためにRを実行できません。

Error: invalid mode (S4) to pass to Fortran (arg 1)

確認isS4(mat)したところTRUEです。したがって、関数に渡すためにS4オブジェクトを何らかの方法で変換する方法があると思います。どんなアドバイスも大歓迎です!

更新:ブロック対角行列を作成するために次のコードを使用します。

grp.ids <- as.factor(c(rep(1,8), rep(2,4), rep(3,2)))
x <- model.matrix(~grp.ids)
X <- do.call(bdiag, replicate(238, x, simplify=FALSE))

bdiag関数を使用せずにS3行列を取得する他の方法はありますか?ありがとう!

4

1 に答える 1

3

インターフェイスのみ.Call()が完全なRオブジェクトをCまたはC++コードに渡すことができます。R拡張機能の作成マニュアルのセクション5を参照してください。を使用する.Fortran()と、、、 ....C()の基本ベクトルとそれに対応するFortranタイプに制限されます。intdouble

于 2012-10-24T21:05:25.540 に答える