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 |
/** representation of a factor variable. In R there is no actual xpression |
2 |
26 Feb 07 |
jari |
type called "factor", instead it is coded as an int vector with a list |
2 |
26 Feb 07 |
jari |
attribute. The parser code of REXP converts such constructs directly into |
2 |
26 Feb 07 |
jari |
the RFactor objects and defines an own XT_FACTOR type |
2 |
26 Feb 07 |
jari |
9 |
|
2 |
26 Feb 07 |
jari |
@version $Id$ |
2 |
26 Feb 07 |
jari |
11 |
*/ |
2 |
26 Feb 07 |
jari |
12 |
public class RFactor extends Object { |
2 |
26 Feb 07 |
jari |
/** 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 |
/** 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 |
/** 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 |
/** create a new factor variable, based on the supplied arrays. |
2 |
26 Feb 07 |
jari |
@param i array if IDs (0..v.length-1) |
2 |
26 Feb 07 |
jari |
@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 |
/** special constructor used by REXP parser to save some re-indexing |
2 |
26 Feb 07 |
jari |
and performing automatic index conversion |
2 |
26 Feb 07 |
jari |
@param i index array |
2 |
26 Feb 07 |
jari |
@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 |
/** add a new element (by name) |
2 |
26 Feb 07 |
jari |
@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 |
/** returns name for a specific ID |
2 |
26 Feb 07 |
jari |
@param i ID |
2 |
26 Feb 07 |
jari |
@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 |
/** 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 |
/** displayable representation of the factor variable */ |
2 |
26 Feb 07 |
jari |
75 |
public String toString() { |
2 |
26 Feb 07 |
jari |
//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 |
|