mev-4.0.01/source/org/tigr/microarray/mev/r/RFactor.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 package org.tigr.microarray.mev.r;
2 26 Feb 07 jari 2
2 26 Feb 07 jari 3 import java.util.*;
2 26 Feb 07 jari 4
2 26 Feb 07 jari 5 /** representation of a factor variable. In R there is no actual xpression
2 26 Feb 07 jari 6     type called "factor", instead it is coded as an int vector with a list
2 26 Feb 07 jari 7     attribute. The parser code of REXP converts such constructs directly into
2 26 Feb 07 jari 8     the RFactor objects and defines an own XT_FACTOR type 
2 26 Feb 07 jari 9     
2 26 Feb 07 jari 10     @version $Id$
2 26 Feb 07 jari 11 */    
2 26 Feb 07 jari 12 public class RFactor extends Object {
2 26 Feb 07 jari 13     /** IDs (content: Integer) each entry corresponds to a case, ID specifies the category */
2 26 Feb 07 jari 14     Vector id;
2 26 Feb 07 jari 15     /** values (content: String), ergo category names */
2 26 Feb 07 jari 16     Vector val;
2 26 Feb 07 jari 17
2 26 Feb 07 jari 18     /** create a new, empty factor var */
2 26 Feb 07 jari 19     public RFactor() { id=new Vector(); val=new Vector(); }
2 26 Feb 07 jari 20     
2 26 Feb 07 jari 21     /** create a new factor variable, based on the supplied arrays.
2 26 Feb 07 jari 22   @param i array if IDs (0..v.length-1)
2 26 Feb 07 jari 23   @param v values - cotegory names */
2 26 Feb 07 jari 24     public RFactor(int[] i, String[] v) {
2 26 Feb 07 jari 25   id=new Vector(); val=new Vector();
2 26 Feb 07 jari 26   int j;
2 26 Feb 07 jari 27   if (i!=null && i.length>0)
2 26 Feb 07 jari 28       for(j=0;j<i.length;j++)
2 26 Feb 07 jari 29     id.addElement(new Integer(i[j]));
2 26 Feb 07 jari 30   if (v!=null && v.length>0)
2 26 Feb 07 jari 31       for(j=0;j<v.length;j++)
2 26 Feb 07 jari 32     val.addElement(new Integer(v[j]));
2 26 Feb 07 jari 33     }
2 26 Feb 07 jari 34
2 26 Feb 07 jari 35     /** special constructor used by REXP parser to save some re-indexing
2 26 Feb 07 jari 36   and performing automatic index conversion
2 26 Feb 07 jari 37         @param i index array
2 26 Feb 07 jari 38         @param v vector of xpressions which should be all strings */
2 26 Feb 07 jari 39     public RFactor(int[] i, Vector v) {
2 26 Feb 07 jari 40   id=new Vector(); val=new Vector();
2 26 Feb 07 jari 41   int j;
2 26 Feb 07 jari 42   if (i!=null && i.length>0)
2 26 Feb 07 jari 43       for(j=0;j<i.length;j++)
2 26 Feb 07 jari 44     id.addElement(new Integer(i[j]-1));
2 26 Feb 07 jari 45   if (v!=null && v.size()>0)
2 26 Feb 07 jari 46       for(j=0;j<v.size();j++) {
2 26 Feb 07 jari 47     REXP x=(REXP)v.elementAt(j);
2 26 Feb 07 jari 48     val.addElement((x==null||x.Xt!=REXP.XT_STR)?null:(String)x.cont);
2 26 Feb 07 jari 49       };
2 26 Feb 07 jari 50     };
2 26 Feb 07 jari 51     
2 26 Feb 07 jari 52     /** add a new element (by name)
2 26 Feb 07 jari 53   @param v value */
2 26 Feb 07 jari 54     public void add(String v) {
2 26 Feb 07 jari 55   int i=val.indexOf(v);
2 26 Feb 07 jari 56   if (i<0) {
2 26 Feb 07 jari 57       i=val.size();
2 26 Feb 07 jari 58       val.addElement(v);
2 26 Feb 07 jari 59   };
2 26 Feb 07 jari 60   id.addElement(new Integer(i));
2 26 Feb 07 jari 61     }
2 26 Feb 07 jari 62
2 26 Feb 07 jari 63     /** returns name for a specific ID 
2 26 Feb 07 jari 64   @param i ID
2 26 Feb 07 jari 65   @return name. may throw exception if out of range */
2 26 Feb 07 jari 66     public String at(int i) {
2 26 Feb 07 jari 67   if (i<0||i>=id.size()) return null;
2 26 Feb 07 jari 68   return (String)val.elementAt(((Integer)id.elementAt(i)).intValue());
2 26 Feb 07 jari 69     }
2 26 Feb 07 jari 70
2 26 Feb 07 jari 71     /** returns the number of caes */
2 26 Feb 07 jari 72     public int size() { return id.size(); }
2 26 Feb 07 jari 73
2 26 Feb 07 jari 74     /** displayable representation of the factor variable */
2 26 Feb 07 jari 75     public String toString() {
2 26 Feb 07 jari 76   //return "{"+((val==null)?"<null>;":("levels="+val.size()+";"))+((id==null)?"<null>":("cases="+id.size()))+"}";
2 26 Feb 07 jari 77   StringBuffer sb=new StringBuffer("{levels=(");
2 26 Feb 07 jari 78   if (val==null)
2 26 Feb 07 jari 79       sb.append("null");
2 26 Feb 07 jari 80   else
2 26 Feb 07 jari 81       for (int i=0;i<val.size();i++) {
2 26 Feb 07 jari 82     sb.append((i>0)?",\"":"\"");
2 26 Feb 07 jari 83     sb.append((String)val.elementAt(i));
2 26 Feb 07 jari 84     sb.append("\"");
2 26 Feb 07 jari 85       };
2 26 Feb 07 jari 86   sb.append("),ids=(");
2 26 Feb 07 jari 87   if (id==null)
2 26 Feb 07 jari 88       sb.append("null");
2 26 Feb 07 jari 89   else
2 26 Feb 07 jari 90       for (int i=0;i<id.size();i++) {
2 26 Feb 07 jari 91     if (i>0) sb.append(",");
2 26 Feb 07 jari 92     sb.append((Integer)id.elementAt(i));
2 26 Feb 07 jari 93       };
2 26 Feb 07 jari 94   sb.append(")}");
2 26 Feb 07 jari 95   return sb.toString();
2 26 Feb 07 jari 96     }
2 26 Feb 07 jari 97 }
2 26 Feb 07 jari 98