Hello all,

I'm new to the list and I'm hoping I might be able to find help for a very 
mysterious failure within the RPY2 code base.  I am converting a python 
dictionary of arrays into an R DataFrame.  The conversion works fine when I run 
the code from iPython command line.  However, when I run exactly the same code 
within a Django session it fails without an error message.  It just exits the 
__init__ method.

I have used Eclipse Debug to find the exact line of failure and it is the 
following line 

        df = baseenv_ri.get("data.frame").rcall(kv, globalenv_ri)
    
in __init__() of rpy2.robjects.vectors.DataFrame.

I've copied the __init__ at the bottom of the email from 
rpy2.objects.vectors.DataFrame for reference.  

I have been able to user other classes/methods within the rpy2.robjects.vector 
in both Django and the command line to convert vectors, arrays, lists, etc....  
It is only DataFrame that I've discovered an issue and its only when called 
from a Django session.  Once again, command line works fine.

I have confirmed multiple times that the Django interpreter is the same as my 
command line interpreter.  I am using python 2.6.6 32-bit and R version 2.12 
and rpy2-2.1.9_20101221-py2.6-macosx-10.5-i386.egg (though I am on snow 
leopard).

It is a very strange issue because I can only recreate the issue in a Django 
runserver session (it even works fine in a python manage.py -shell session).  
And it does not provide any error.  It simply fails at this line and exits the 
__init__. 

Does anybody have any insight into what might cause this?  Its such a peculiar 
issue I don't even know where to start debugging the rpy2 code.  Any thoughts?  
Thanks in advance.

Henry


    def __init__(self, tlist):
        """ Create a new data frame.

        :param tlist: rpy2.rlike.container.TaggedList or 
rpy2.rinterface.SexpVector (and of class 'data.frame' for R)
        """
        if isinstance(tlist, rlc.TaggedList):
            df = baseenv_ri.get("data.frame").rcall(tlist.items(), globalenv_ri)
            super(DataFrame, self).__init__(df)
        elif isinstance(tlist, rinterface.SexpVector):
            if tlist.typeof != rinterface.VECSXP:
                raise ValueError("tlist should of typeof VECSXP")
            if not globalenv_ri.get('inherits')(tlist, self._dataframe_name)[0]:
                raise ValueError('tlist should of R class "data.frame"')
            super(DataFrame, self).__init__(tlist)
        elif isinstance(tlist, dict):
            kv = [(k, conversion.py2ri(v)) for k,v in tlist.iteritems()]
            kv = tuple(kv)
            df = baseenv_ri.get("data.frame").rcall(kv, globalenv_ri)
            super(DataFrame, self).__init__(df)
        else:
            raise ValueError("tlist can be either "+
                             "an instance of rpy2.rlike.container.TaggedList," +
                             " or an instance of rpy2.rinterface.SexpVector" +
                             " of type VECSXP, or a Python dict.")
    
------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
rpy-list mailing list
rpy-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rpy-list

Reply via email to