我使用R中bdiag
包中的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矩阵?谢谢!
答案 0 :(得分:3)
只有.Call()
接口可以将完整的R对象传递给C或C ++代码,请参阅“编写R扩展”手册的第5节。使用.Fortran()
和.C()
,您只能使用int
,double
,...及其相应的Fortran类型的基本向量。