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
[email protected]
https://lists.sourceforge.net/lists/listinfo/rpy-list