Revision: 408
          http://rpy.svn.sourceforge.net/rpy/?rev=408&view=rev
Author:   lgautier
Date:     2008-03-02 11:47:50 -0800 (Sun, 02 Mar 2008)

Log Message:
-----------
Fixes in the vector operation (+ * / ...)
Fixes in error messages

Modified Paths:
--------------
    trunk/sandbox/rpy_nextgen/robjects/__init__.py

Modified: trunk/sandbox/rpy_nextgen/robjects/__init__.py
===================================================================
--- trunk/sandbox/rpy_nextgen/robjects/__init__.py      2008-03-01 22:45:04 UTC 
(rev 407)
+++ trunk/sandbox/rpy_nextgen/robjects/__init__.py      2008-03-02 19:47:50 UTC 
(rev 408)
@@ -9,13 +9,15 @@
 def defaultPy2RMapper(self, o):
     if isinstance(o, Robject):
         return o._sexp
+    if isinstance(o, rinterface.Sexp):
+        return o
     if isinstance(o, array.array):
         if o.typecode in ('h', 'H', 'i', 'I'):
             res = rinterface.SexpVector(o, rinterface.INTSXP)
         elif o.typecode in ('f', 'd'):
             res = rinterface.SexpVector(o, rinterface.REALSXP)
         else:
-            raise("Nothing can be done for this array type at the moment.")
+            raise(ValueError("Nothing can be done for this array type at the 
moment."))
     elif isinstance(o, int):
         res = rinterface.SexpVector([o, ], rinterface.INTSXP)
     elif isinstance(o, float):
@@ -25,7 +27,7 @@
     elif isinstance(o, str):
         res = rinterface.SexpVector([o, ], rinterface.STRSXP)
     else:
-        raise("Nothing can be done for this type at the moment.")
+        raise(ValueError("Nothing can be done for this type at the moment."))
     return res
     
 def defaultR2PyMapper(o):
@@ -33,6 +35,8 @@
         res = Rvector(o)
     elif isinstance(o, rinterface.SexpClosure):
         res = Rfunction(o)
+    elif isinstance(o, rinterface.SexpEnvironment):
+        res = Renvironment(o)
     else:
         res = o
     return res
@@ -60,7 +64,7 @@
         for a in args:
             if not isinstance(a, rinterface.SexpVector):
                 raise(TypeError("Subset only take R vectors"))
-        res = r.globalEnv.get("[")([self._sexp, ] + args)#, drop=drop)
+        res = rinterface.globalEnv.get("[")([self._sexp, ] + args)#, drop=drop)
         return res
 
     def __getitem__(self, i):
@@ -68,31 +72,31 @@
         return res
 
     def __add__(self, x):
-        res = r.globalEnv.get("+")(self._sexp, x)
+        res = r.__getattribute__("+")(self, x)
         return res
 
     def __sub__(self, x):
-        res = r.globalEnv.get("-")(self._sexp, x)
+        res = r.__getattribute__("-")(self, x)
         return res
 
     def __mul__(self, x):
-        res = r.globalEnv.get("*")(self._sexp, x)
+        res = r.__getattribute__("*")(self, x)
         return res
 
     def __div__(self, x):
-        res = r.globalEnv.get("/")(self._sexp, x)
+        res = r.__getattribute__("/")(self, x)
         return res
 
     def __divmod__(self, x):
-        res = r.globalEnv.get("%%")(self._sexp, x)
+        res = r.__getattribute__("%%")(self, x)
         return res
 
     def __or__(self, x):
-        res = r.globalEnv.get("|")(self._sexp, x)
+        res = r.__getattribute__("|")(self, x)
         return res
 
     def __and__(self, x):
-        res = r.globalEnv.get("&")(self._sexp, x)
+        res = r.__getattribute__("&")(self, x)
         return res
 
 
@@ -104,7 +108,7 @@
         if (isinstance(o, rinterface.SexpClosure)):
             self._sexp = o
         else:
-            raise("Cannot instantiate.")
+            raise(ValueError("Cannot instantiate."))
 
     def __call__(self, *args, **kwargs):
         new_args = [self.mapper(a) for a in args]
@@ -121,10 +125,10 @@
         if (isinstance(o, rinterface.SexpEnvironment)):
             self._sexp = o
         else:
-            raise("Cannot instantiate")
+            raise(ValueError("Cannot instantiate"))
 
     def __getattr__(self, attr):
-        res = self._sexp.get(attr)
+        res = self._sexp[attr]
         return res
 
 
@@ -138,7 +142,7 @@
             rinterface.initEmbeddedR(*args)
             R._instance = self
         else:
-            raise("Only one instance of R can be created")
+            raise(ValueError("Only one instance of R can be created"))
         
     def __getattribute__(self, attr):
         res = rinterface.globalEnv.get(attr)


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

Reply via email to