SCM

SCM Repository

[matrix] Diff of /pkg/src/sscCrosstab.c
ViewVC logotype

Diff of /pkg/src/sscCrosstab.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 82, Wed Apr 14 23:20:06 2004 UTC revision 83, Thu Apr 15 02:51:07 2004 UTC
# Line 116  Line 116 
116      return ans;      return ans;
117  }  }
118    
119    /* FIXME:
120     *  Split main part into a function that takes nr, nc, p, i, and
121     *  returns perm of size nr.
122     *  Call function for successive pairs.
123     *  Invert the permutation before return.
124     */
125  SEXP sscCrosstab_groupedPerm(SEXP ctab)  SEXP sscCrosstab_groupedPerm(SEXP ctab)
126  {  {
127      SEXP      SEXP
# Line 167  Line 173 
173              int maxrc, rr;              int maxrc, rr;
174              int i, minjc = nl2+1;       /* find minimum positive jcount */              int i, minjc = nl2+1;       /* find minimum positive jcount */
175              for (j = 0; j < nl1; j++) {              for (j = 0; j < nl1; j++) {
176                  if (jcounts[i] > 0 && jcounts[j] < minjc) minjc = jcounts[j];                  if (jcounts[j] > 0 && jcounts[j] < minjc) minjc = jcounts[j];
177                    if (minjc == 1) break;
178              }              }
179                                  /* accumulate the row counts on cols where jcount=minjc */                                  /* accumulate the row counts on cols where jcount=minjc */
180              for (i = 0; i < nl2; i++) icounts[i] = 0;              for (i = 0; i < nl2; i++) icounts[i] = 0;
# Line 192  Line 199 
199              for (j = 0; j < nl1; j++) {              for (j = 0; j < nl1; j++) {
200                  int p2 = np[j+1];                  int p2 = np[j+1];
201                  for (i = np[j]; i < p2; i++) {                  for (i = np[j]; i < p2; i++) {
202                      if (ni[i] != rr) {                      if (ni[i] == rr) {
203                            jcounts[j]--;
204                        } else {
205                          if (i != p1) ni[p1] = ni[i];                          if (i != p1) ni[p1] = ni[i];
206                          p1++;                          p1++;
207                      }                      }
# Line 200  Line 209 
209                  np[j] = p3;                  np[j] = p3;
210                  p3 = p1;        /* save the count for the next iteration */                  p3 = p1;        /* save the count for the next iteration */
211              }              }
212                np[nl1] = p3;
213          }          }
214          Free(icounts);          Free(icounts);
215      }      }

Legend:
Removed from v.82  
changed lines
  Added in v.83

root@r-forge.r-project.org
ViewVC Help
Powered by ViewVC 1.0.0  
Thanks to:
Vienna University of Economics and Business Powered By FusionForge