2012-10-24 2 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

해결 방법은 [this] [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++ 코드로 전달할 수 있습니다. R 확장 쓰기 설명서의 섹션 5를 참조하십시오. .Fortran().C()을 사용하면 기본 벡터가 int, double, ... 및 해당 포트란 유형으로 제한됩니다.

+0

는 주셔서 감사합니다 논평! 그래서, 만약 내가 내 함수를 사용하고 싶다면 S3 블록 대각선 행렬을 어떻게 만들 수 있습니까? 위의 게시물을 업데이트했습니다. 다시 한번 감사드립니다 :) – alittleboy

관련 문제