Hello,

I have created a .dll file using G77 and MinGW on my PC (Windows 2000). After using dyn.load to bring it into R2.0.1, I then call the .dll through the function ccprox shown below. It returns the correct values. If I run it a second time though it returns different values, so it seems something is being placed oddly in memory.

If I unload and reload the .dll it works again the first time.

It does the same if I copy the compiled .dll over to my Windows XP machine.

Thank you for any help,

Brian Habing
[EMAIL PROTECTED]


The Fortran subroutine beings with:

        subroutine ccprox(nexmn,nitem,respmat2,covmatr,covmatt,
     $               cormatr,cormatt)

!ccccc This subroutine will calculate all the pairwise
!ccccc conditional covariances. An ending r means for
!ccccc rest score, an ending t means for total score.

        parameter (maxitem=100,maxexmn=10000,maxcats=10,ncells=1001)

!ccccc  ncells must be maxitem*maxcats+1

        integer nexmn,nitem,scoretemp,mscore
        integer respmat(maxexmn,maxitem)
        integer tscore(maxexmn) /maxexmn*0/
        integer tstemp(maxexmn) /maxexmn*0/
        integer natscore(ncells) /ncells*0/
        integer natemp(ncells) /ncells*0/
        integer i,j,k,l
        integer tcountt,tcountr,tcountt2,tcountr2
        real*8 respmat2(maxexmn,maxitem)
        real*8 pisum(ncells),plsum(ncells),pilsum(ncells)
        real*8 qisum(ncells),qlsum(ncells),qilsum(ncells)       
        real*8 pi2sum(ncells),pl2sum(ncells)
        real*8 qi2sum(ncells),ql2sum(ncells)
        real*8 covmatr(maxitem,maxitem),cormatr(maxitem,maxitem)
        real*8 covmatt(maxitem,maxitem),cormatt(maxitem,maxitem)
        real*8 sisl


The R function that is calling it is as follows (inputdata is a 400x10 matrix of 0's and 1's
in the example I have been trying).


ccprox<-function(inputdata){
  nexmn<-length(inputdata[,1])
  nitem<-length(inputdata[1,])
  covmatr<-matrix(0,100,100)
  covmatt<-matrix(0,100,100)
  cormatr<-matrix(0,100,100)
  cormatt<-matrix(0,100,100)
  respmat2<-matrix(0,nrow=10000,ncol=100)
  respmat2[1:nexmn,1:nitem]<-as.matrix(inputdata)
  if (is.loaded("ccprox_")==TRUE){
  x<-(.C("ccprox_",as.integer(nexmn),as.integer(nitem),respmat2,
      covmatr,covmatt,cormatr,cormatt))
  list(covmatr=x[[4]][1:nitem,1:nitem],covmatt=x[[5]][1:nitem,1:nitem],
      cormatr=x[[6]][1:nitem,1:nitem],cormatt=x[[7]][1:nitem,1:nitem],)
    }
  else{
    warning("ccprox.dll was not loaded")
    NULL
  }
}

______________________________________________
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

Reply via email to