Bryan, The previous responses will point you in the right direction. I have found, however, that it takes a while to get used to the requirements, and there are many possible sources of error.
1) You have to convert the main program to a subroutine. Any arrays declared in the main program or any nested subroutine have to created in R before the subroutine is called, and passed to the subroutine. On the other hand, this provides the advantage of allocatable array size in FORTRAN 77. 2) You have to make sure that you are very careful about storage. I have reluctantly decided that attempting minimize storage by using integer*2 and real*4 is not worth it, and I now use just integer and double precision to minimize problems with R. 3) Consider casting every variable passed in the .Fortran() call. Many of them would be correct by default possibly, but it is easier to simply cast them all, e.g. as.integer() for all integers, as.double() for real numbers. These get the storage right, and strip of any attributes besides he actual values. Fortunately, R and FORTRAN agree about storage order in arrays and you don't have to micro-manage that. 4) When you get it wrong, the probability of a seg fault and hard crash is very high. So, every time you modify the R function that calls the .Fortran you have written, do a save.image() before you try the code. Otherwise you lose all your changes. If you have the luxury of working in linux (and presumably other *nixes), you can use "write(6,*) whatever" debug statements in your code and the output goes to your R session. In Windows, you have to use the specific debug routines described in the R manuals. 5) Managing the returned values has to handled in the .Fortran() call by giving the argument a name. Then, that name can be used as the component name of the returned object. Just below is an example from labdsv that converts any dissimilarity or distance matrix to the nearest euclidean distance object. The PACKAGE= argument is used when the routine is pat of a package; it's not necessary for ad hoc functions. euclidify <- function (x,upper=FALSE,diag=FALSE) { x <- as.dist(x) tmp <- .Fortran("euclid", x=as.matrix(x), as.integer(attr(x,"Size")), PACKAGE='labdsv') tmp2 <- as.dist(tmp$x) attr(tmp2, "Labels") <- dimnames(x)[[1]] attr(tmp2, "Diag") <- diag attr(tmp2, "Upper") <- upper attr(tmp2, "method") <- paste("euclidify", attr(x, "method")) attr(tmp2, "call") <- match.call() tmp2 } Dave Roberts Bryan Klingaman wrote: > How do you convert Fortran Code to R Code to use and execute in R? Or how do > you take Fortran code and make it run in R? So what I'm getting at is, I > have some code in fortran and I want to be able to run that same code for R. > Please email me back and let me know how to do that, thanks. > > Bryan > Email: [EMAIL PROTECTED] > > > --------------------------------- > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.