Author: jcouteau Date: 2009-05-01 09:43:50 +0000 (Fri, 01 May 2009) New Revision: 72 Modified: lutinj2r/trunk/src/main/java/org/codelutin/j2r/types/RDataFrame.java lutinj2r/trunk/src/test/java/org/codelutin/j2r/DataframeTest.java Log: Adding data checking in data.frames Modified: lutinj2r/trunk/src/main/java/org/codelutin/j2r/types/RDataFrame.java =================================================================== --- lutinj2r/trunk/src/main/java/org/codelutin/j2r/types/RDataFrame.java 2009-05-01 08:14:19 UTC (rev 71) +++ lutinj2r/trunk/src/main/java/org/codelutin/j2r/types/RDataFrame.java 2009-05-01 09:43:50 UTC (rev 72) @@ -2,7 +2,6 @@ import java.io.Serializable; import java.util.HashMap; -import java.util.Iterator; import java.util.Set; import java.util.Vector; @@ -38,6 +37,9 @@ this.rowNames = rowNames; this.data = (Vector<Vector<? extends Serializable>>) data; this.variable = variable; + if (checkConsistency() == false) { + throw new RException("A dimension is wrong on the dataframe"); + } } /** @@ -66,6 +68,9 @@ public void setNames(Vector<String> names, REngine engine) throws RException { this.names = names; + if (checkConsistency() == false) { + throw new RException("A dimension is wrong on the dataframe"); + } } /** @@ -93,6 +98,9 @@ public void setRowNames(Vector<String> rowNames, REngine engine) throws RException { this.rowNames = rowNames; + if (checkConsistency() == false) { + throw new RException("A dimension is wrong on the dataframe"); + } } /** @@ -120,6 +128,9 @@ public void setData(Vector<Vector<? extends Serializable>> data, REngine engine) throws RException { this.data = data; + if(checkConsistency()==false){ + throw new RException("A dimension is wrong on the dataframe"); + } } /** @@ -225,6 +236,10 @@ + this.variable + ")$" + key + ")"); attributes.put(key, attribute); } + + if(checkConsistency()==false){ + throw new RException("A dimension is wrong on the dataframe"); + } } @@ -388,6 +403,29 @@ } } - //TODO check data consistency. + /** + * Method to check data consistency + * + * @return true if data is consistent (no dimensions error), false if there + * is a dimension error. + */ + public boolean checkConsistency() { + Integer rowNameslength = rowNames.size(); + Integer namesLength = names.size(); + Integer dataLength = data.size(); + Integer datavectorLength = data.get(0).size(); + if (rowNameslength != datavectorLength) { + return false; + } + if (namesLength != dataLength) { + return false; + } + for (int i = 0; i < dataLength; i++) { + if (data.get(i).size() != datavectorLength) { + return false; + } + } + return true; + } } Modified: lutinj2r/trunk/src/test/java/org/codelutin/j2r/DataframeTest.java =================================================================== --- lutinj2r/trunk/src/test/java/org/codelutin/j2r/DataframeTest.java 2009-05-01 08:14:19 UTC (rev 71) +++ lutinj2r/trunk/src/test/java/org/codelutin/j2r/DataframeTest.java 2009-05-01 09:43:50 UTC (rev 72) @@ -80,8 +80,13 @@ attributes.put("attr1", "\"this is an attribute\""); attributes.put("attr2", "\"this is another attribute\""); - RDataFrame testDataFrame = new RDataFrame(names, rowNames, data, - engine, "test"); + RDataFrame testDataFrame = new RDataFrame(); + try { + testDataFrame = new RDataFrame(names, rowNames, data, engine, + "test"); + } catch (RException eee) { + Assert.fail(); + } testDataFrame.setAttributes(attributes); testDataFrame.commit(engine); @@ -147,8 +152,13 @@ attributes.put("attr1", "\"this is an attribute\""); attributes.put("attr2", "\"this is another attribute\""); - RDataFrame testDataFrame = new RDataFrame(names, rowNames, data, - engine, "test"); + RDataFrame testDataFrame = new RDataFrame(); + try { + testDataFrame = new RDataFrame(names, rowNames, data, engine, + "test"); + } catch (RException eee) { + Assert.fail(); + } testDataFrame.setAttributes(attributes); testDataFrame.commit(engine); @@ -179,4 +189,100 @@ .getAttribute("attr2")); } + @Test + public void testDataFrameWrongDimensions() throws Exception { + //Test wrong names size + Vector<String> names = new Vector<String>(); + names.add("column1"); + + Vector<String> rowNames = new Vector<String>(); + rowNames.add("row 1"); + rowNames.add("row 2"); + rowNames.add("row 3"); + + Vector<Double> column1 = new Vector<Double>(); + column1.add(3.0); + column1.add(4.5); + column1.add(0.01); + + Vector<Double> column2 = new Vector<Double>(); + column2.add(1.0); + column2.add(5555555555555555555555.0); + column2.add(3.0); + + Vector<Vector<? extends Serializable>> data = new Vector<Vector<? extends Serializable>>(); + data.add(column1); + data.add(column2); + + try { + RDataFrame testDataFrame = new RDataFrame(names, rowNames, data, + engine, "test"); + } catch (RException eee) { + Assert.assertEquals("A dimension is wrong on the dataframe", eee + .getMessage()); + } + + //Test wrong row names size + names = new Vector<String>(); + names.add("column1"); + names.add("column2"); + + rowNames = new Vector<String>(); + rowNames.add("row 1"); + rowNames.add("row 2"); + + column1 = new Vector<Double>(); + column1.add(3.0); + column1.add(4.5); + column1.add(0.01); + + column2 = new Vector<Double>(); + column2.add(1.0); + column2.add(5555555555555555555555.0); + column2.add(3.0); + + data = new Vector<Vector<? extends Serializable>>(); + data.add(column1); + data.add(column2); + + try { + RDataFrame testDataFrame = new RDataFrame(names, rowNames, data, + engine, "test"); + } catch (RException eee) { + Assert.assertEquals("A dimension is wrong on the dataframe", eee + .getMessage()); + } + + //Test wrong data size + names = new Vector<String>(); + names.add("column1"); + names.add("column2"); + + rowNames = new Vector<String>(); + rowNames.add("row 1"); + rowNames.add("row 2"); + rowNames.add("row 3"); + + column1 = new Vector<Double>(); + column1.add(3.0); + column1.add(4.5); + column1.add(0.01); + + column2 = new Vector<Double>(); + column2.add(1.0); + column2.add(5555555555555555555555.0); + + data = new Vector<Vector<? extends Serializable>>(); + data.add(column1); + data.add(column2); + + try { + RDataFrame testDataFrame = new RDataFrame(names, rowNames, data, + engine, "test"); + } catch (RException eee) { + Assert.assertEquals("A dimension is wrong on the dataframe", eee + .getMessage()); + } + } + }