- storage[i][8] = *pre;
- pvalues[i]=*pre;
- }
- }
- // End of else statement
- bflag = 1;
- }
-
- // Calculates the mean of counts (not normalized)
- double ** temp;
- temp = malloc(row*sizeof(double *));
- for (i = 0; i<row; i++){
- temp[i] = malloc(col*sizeof(double));
- }
-
- for(j=0;j<row;j++){
- for(i=0;i<2;i++){
- temp[j][i]=0;
+ else{
+
+ testp(permuted_ttests, permutes, permuted,pmatrix, nc, nr, gvalue,tinitial,pvalues);
+
+ // Checks to make sure the matrix isn't sparse.
+ double sparse[row], sparse2[row];
+ for(i=0;i<row;i++){
+ sparse[i]=0;
+ sparse2[i]=0;}
+
+ c=0;
+ for(i=0;i<row;i++){
+
+ for(j=0;j<g-1;j++){
+ sparse[i]=sparse[i]+matrix[i][j];
+ }
+
+ if(sparse[i] < (double)(g-1)){
+ c++;
+ }
+ for(j=g-1;j<col;j++){ // ?<= for col
+ sparse2[i]=sparse2[i]+matrix[i][j];
+ }
+
+ if( (sparse2[i] <(double)(col-g+1))) {
+ c++;
+ }
+
+ if (c==2){
+ c=0;
+
+ double f11,f12,f21,f22;
+
+ f11=sparse[i];
+ sparse[i]=0;
+
+ f12=sparse2[i];
+ sparse2[i]=0;
+
+ f21=total1-f11;
+ f22=total2-f12;
+
+ double data[] = {f11, f12, f21, f22};
+
+ int *nr, *nc, *ldtabl, *work;
+ int nrow=2, ncol=2, ldtable=2, workspace=10000000; // I added two zeros for larger data sets
+ double *expect, *prc, *emin,*prt,*pre;
+ double e=0, prc1=0, emin1=0, prt1=0, pre1=0;
+
+ nr = &nrow;
+ nc = &ncol;
+ ldtabl=&ldtable;
+ work = &workspace;
+
+ expect = &e;
+ prc = &prc1;
+ emin=&emin1;
+ prt=&prt1;
+ pre=&pre1;
+
+ fexact(nr,nc,data, ldtabl,expect,prc,emin,prt,pre,work);
+
+ if (*pre>.999999999){
+ *pre=1;
+ }
+ storage[i][8] = *pre;
+ pvalues[i]=*pre;
+ }
+ }
+ // End of else statement
+ bflag = 1;