>>>>> "simon" == simon chou <[EMAIL PROTECTED]> >>>>> on Thu, 21 Apr 2005 18:36:17 +0800 writes:
simon> Hi, First ,please excuse my poor English. no problem - we have read much worse ;-) <...........> simon> Another way I have tried uses .Fortran (). The fortran code were. simon> 1.f simon> subroutine readmm5(mm5file,IFLAG,MIF) simon> integer iflag,MIF(50,20),MRF(20,20) simon> CHARACTER*80 mm5file,MIFC(50,20),MRFC(20,20) simon> OPEN (11,FILE=mm5file,FORM='UNFORMATTED') simon> READ(11) IFLAG simon> IF ( IFLAG .EQ. 0 ) THEN simon> READ(mm5file) MIF,RMRF,MIFC,MRFC simon> endif simon> end simon> $R CMD SHLIB 1.f simon> $R >> library(foreign) >> dyn.load("1.so") >> .Fortran("readmm5",as.character("mmout"),as.integer(1),as.matrix(nrow=50,ncol=20,data=as.integer(rep(0,50)))) simon> This works alright until starts to read the 50 by 20 integer array. simon> The bit about using as.matrix() to read the array do seem suspicious. {indeed!} simon> I do not know what is the proper way to read it. Instead of your as.matrix(..) you could use matrix(), also you should *assign* the result of .Fortran() and you should use your space keybar to make things more readable. This leads to r <- .Fortran("readmm5", file = as.character("mmout"), iflag = as.integer(1), mif = matrix(as.integer(0), nrow=50,ncol=20)) where r is list where r[["mif"]] should be your desired matrix. Alternatively, in your case, mif <- .Fortran("readmm5", file = as.character("mmout"), iflag = as.integer(1), mif = matrix(as.integer(0), nrow=50,ncol=20))[["mif"]] Hoping this helps further, Martin ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html