Hello, I am trying to call a FORTRAN subroutine from R. The Fortran code is @:
http://lib.stat.cmu.edu/apstat/206 It performs a bivariate isotonic regression on a rectangular grid (m X n) matrix. I used the g77 compiler and successfully created a dll file and it also loads successfully from R. But somehow the programs fails to run properly. (I do get the correct result when I compile the FORTRAN code). Please see below and note that since my input matrix X is monotonically increasing in both directions, input should be equal to output since the weights are set to 1 for all elements. (also verified this in FORTRAN to make sure that the subroutine works). Output[[10]] is supposed to be the monotonically regressed output, but it does not come out correctly. I don't know if its something to do with the way I am feeding the parameters to the DLL. Thanks in advance for any help I can receive. I am not god with FORTRAN - very very infrequent FORTRAN user. I am using R 2.4.0. Regards Krishna. > rm(list=ls(all=TRUE)) > dyn.load("c:/smooth.dll") > is.loaded("smooth") [1] TRUE > NROW<-4 > NCOL<-4 > NDIM<-4 > NCYCLE<-5 > X<-array(c(0.05,0.2,0.35,0.43,0.09,0.29,0.41,0.55,0.2,0.33,0.55,0.7,0.33,0.48,0.6,0.8)) > W<-array(rep(1.0,length(X))) > X<-matrix(X,nrow=4,ncol=4) > X<-t(X) > W<-matrix(W,nrow=4,ncol=4) > A<-array(0,dim=c(NROW,NCOL,4)) > B<-array(0,dim=c(NDIM,5)) > NCYCLE<-5 > ICYCLE<-5 > G<-(X*0)+0.0 > EPS=0.001 > IFAULT<-5 # Here is how the subroutine says to input the parameters; #SUBROUTINE SMOOTH(NROW, NCOL, NDIM, X, W, A, B, NCYCLE, ICYCLE, G, EPS, IFAULT) # Definitions of each of these input parameters are below; #REAL X(NROW,NCOL), W(NROW,NCOL), A(NROW,NCOL,4), B(NDIM,5), G(NROW,NCOL), EPS, ZERO, DELTA, DELC, DELR, ORD, WW, FRACT DATA ZERO/0.0/, DELTA/0.00001/, FRACT/0.5/ # Here is my R output; > output<-.C("smooth_",as.integer(NROW),as.integer(NCOL),as.integer(NDIM),as.real(X),as.real(W),as.real(A),as.real(B),as.integer(NCYCLE),as.integer(ICYCLE),as.real(G),as.real(EPS),as.integer(IFAULT)) > > output [[1]] [1] 4 [[2]] [1] 4 [[3]] [1] 4 [[4]] [1] 0.05 0.09 0.20 0.33 0.20 0.29 0.33 0.48 0.35 0.41 0.55 0.60 0.43 0.55 0.70 [16] 0.80 [[5]] [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 [[6]] [1] 0.000000e+00 0.000000e+00 0.000000e+00 -5.377600e-19 0.000000e+00 [6] 5.377600e-19 0.000000e+00 0.000000e+00 1.290268e-11 1.803836e-13 [11] 1.333175e-27 0.000000e+00 1.333175e-27 0.000000e+00 -3.434319e-15 [16] 5.092237e-315 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 [21] 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 4.999999e-02 [26] 8.999999e-02 2.000000e-01 3.300000e-01 2.000000e-01 2.900000e-01 [31] 3.300000e-01 4.799998e-01 0.000000e+00 0.000000e+00 0.000000e+00 [36] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 [41] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 [46] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 [51] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 [56] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 [61] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 [[7]] [1] 0.3300000 0.4799998 1.0000002 1.0000002 0.2716666 0.4799998 0.0000000 [8] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 [15] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 [[8]] [1] 5 [[9]] [1] 5 [[10]] [1] 0.0795833 0.1145833 0.2008331 0.3100000 0.2008331 0.3100000 0.2716666 [8] 0.4799998 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 [15] 0.0000000 0.0000000 [[11]] [1] 0.001 [[12]] [1] 5 > > > ____________________________________________________________________________________ Be a better friend, newshound, and ______________________________________________ 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.