2012-10-24 36 views
0

我使用R中Matrix包中的bdiag函數生成對角矩陣,然後將生成的矩陣(稱爲mat)傳遞給自寫函數,但R無法執行由於以下錯誤:R中的S4對象無法傳遞給Fortran

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

請參閱[本] [1]尋求解決方案。 [1]:http://stackoverflow.com/questions/13062164/repeat-a-matrix-many-times-and-get-a-vector-of-matrix-names – alittleboy

回答

3

只有.Call()接口可以將完整的R對象傳遞給C或C++代碼,請參見Writing R Extensions手冊的第5節。使用.Fortran().C(),您僅限於基本向量int,double,...及其相應的Fortran類型。

+0

感謝你的評論!所以,如果我想使用我的函數,我該如何構造一個S3塊對角矩陣?我已經更新了我的帖子。再次感謝 :) – alittleboy