Revision: 450 http://rpy.svn.sourceforge.net/rpy/?rev=450&view=rev Author: lgautier Date: 2008-03-21 04:21:35 -0700 (Fri, 21 Mar 2008)
Log Message: ----------- - Added len method for Rvector - Fixed incorrect handling of boolean Python type (get tricked by their int/bool nature) - Added unit tests to catch the above - Added unit tests for the method subset Modified Paths: -------------- branches/rpy_nextgen/rpy/robjects/__init__.py branches/rpy_nextgen/rpy/robjects/tests/testRobjects.py Modified: branches/rpy_nextgen/rpy/robjects/__init__.py =================================================================== --- branches/rpy_nextgen/rpy/robjects/__init__.py 2008-03-21 09:47:18 UTC (rev 449) +++ branches/rpy_nextgen/rpy/robjects/__init__.py 2008-03-21 11:21:35 UTC (rev 450) @@ -42,12 +42,12 @@ res = rinterface.SexpVector(o, rinterface.REALSXP) else: raise(ValueError("Nothing can be done for this array type at the moment.")) + elif isinstance(o, bool): + res = rinterface.SexpVector([o, ], rinterface.LGLSXP) elif isinstance(o, int): res = rinterface.SexpVector([o, ], rinterface.INTSXP) elif isinstance(o, float): res = rinterface.SexpVector([o, ], rinterface.REALSXP) - elif isinstance(o, bool): - res = rinterface.SexpVector([o, ], rinterface.LGLSXP) elif isinstance(o, str): res = rinterface.SexpVector([o, ], rinterface.STRSXP) elif isinstance(o, list): @@ -146,9 +146,9 @@ res = r.get("&")(self, x) return res + def __len__(self): + return len(self._sexp) - - class Rfunction(Robject): """ An R function (aka "closure"). Modified: branches/rpy_nextgen/rpy/robjects/tests/testRobjects.py =================================================================== --- branches/rpy_nextgen/rpy/robjects/tests/testRobjects.py 2008-03-21 09:47:18 UTC (rev 449) +++ branches/rpy_nextgen/rpy/robjects/tests/testRobjects.py 2008-03-21 11:21:35 UTC (rev 450) @@ -10,7 +10,7 @@ self.assertTrue(isinstance(letters_R, robjects.Rvector)) letters = (('a', 0), ('b', 1), ('c', 2), ('x', 23), ('y', 24), ('z', 25)) for l, i in letters: - self.assertTrue(letters_R[i] == l) + self.assertTrue(letters_R[i]._sexp[0] == l) as_list_R = robjects.r["as.list"] seq_R = robjects.r["seq"] @@ -20,18 +20,18 @@ myList = as_list_R(mySeq) for i, li in enumerate(myList): - self.assertEquals(i, myList[i][0]) + self.assertEquals(i, myList[i][0]._sexp[0]) def testOperators(self): seq_R = robjects.r["seq"] mySeq = seq_R(0, 10) mySeqAdd = mySeq + 2 for i, li in enumerate(mySeq): - self.assertEquals(i + 2, mySeqAdd[i]) + self.assertEquals(i + 2, mySeqAdd[i]._sexp[0]) mySeqAdd = mySeq + mySeq for i, li in enumerate(mySeq): - self.assertEquals(mySeq[i] * 2, mySeqAdd[i]) + self.assertEquals(mySeq[i]._sexp[0] * 2, mySeqAdd[i]._sexp[0]) def testSubset(self): @@ -41,15 +41,34 @@ myIndex = robjects.Rvector(array.array('i', range(1, 11, 2))) mySubset = mySeq.subset(myIndex) + #import pdb; pdb.set_trace() for i, si in enumerate(myIndex): - self.assertEquals(mySeq[si-1], mySubset[i]) + self.assertEquals(mySeq[si._sexp[0]-1]._sexp[0], mySubset[i]._sexp[0]) + # recycling rule + v = robjects.Rvector(array.array('i', range(1, 23))) + m = robjects.r.matrix(v, ncol = 2) + col = m.subset(True, 1) + #import pdb; pdb.set_trace() + self.assertEquals(11, len(col)) + + + def testMapperR2Python(self): sexp = rinterface.globalEnv.get("letters") - self.assertTrue(isinstance(robjects.defaultRobjects2PyMapper(sexp), robjects.Rvector)) - + ob = robjects.defaultRobjects2PyMapper(sexp) + self.assertTrue(isinstance(ob, + robjects.Rvector)) + + sexp = rinterface.globalEnv.get("T") + ob = robjects.defaultRobjects2PyMapper(sexp) + self.assertTrue(isinstance(ob, + robjects.Rvector)) + sexp = rinterface.globalEnv.get("plot") - self.assertTrue(isinstance(robjects.defaultRobjects2PyMapper(sexp), robjects.Rfunction)) + ob = robjects.defaultRobjects2PyMapper(sexp) + self.assertTrue(isinstance(ob, + robjects.Rfunction)) sexp = rinterface.globalEnv.get(".GlobalEnv") self.assertTrue(isinstance(robjects.defaultRobjects2PyMapper(sexp), robjects.Renvironment)) @@ -58,8 +77,14 @@ def testMapperPy2R(self): py = 1 - self.assertTrue(isinstance(robjects.defaultPy2RobjectsMapper(py), robjects.Rvector)) + rob = robjects.defaultPy2RobjectsMapper(py) + self.assertTrue(isinstance(rob, robjects.Rvector)) + py = True + rob = robjects.defaultPy2RobjectsMapper(py) + self.assertTrue(isinstance(rob, robjects.Rvector)) + self.assertEquals(rinterface.LGLSXP, rob._sexp.typeof()) + #FIXME: more tests if __name__ == '__main__': This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ rpy-list mailing list rpy-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rpy-list