[Tutor] Python and rpy

Geoframer geoframer at gmail.com
Fri Dec 22 11:21:57 CET 2006


Thanks Kent that helps some, at least i can do the basic stuff i can do in R
now.

But you kinda hit the nail on the head with your statement "This seems to
work, it keeps a in the internal R representation instead
of converting it to a list of lists" This all started with me trying to get
R to do a kmeans algorithm on a list of lists (a list composed of vectors
containing integers). What i want to do is convert a python list of lists to
the approperiate R object so that i can use the r.kmeans algorithm on it.
I'll write the basic program below.

As i stated i think the conversion from Python to R is going wrong, but i
have no clue on how to properly address that.
The code snippet i was talking about is on page 15 and 16 of the rpy
reference guide http://rpy.sourceforge.net/rpy/doc/rpy.pdf ; the examples
just don't work and i am lacking enough python experience to see why :-S.

What i'm trying to do now is :

----
from rpy import *

class Test:
    def as_r(self):
        return [[1,2,3,4,5],[2,3,4,5,1],[3,4,5,1,2],[4,5,1,2,3],[5,1,2,3,4]]

if __name__ == "__main__":
    a=with_mode(NO_CONVERSION, Test)()
    r.kmeans(a, 2, 5, 10, "Forgy")

----
Which gives as a result :
----
RHOME= C:\Program Files\R\R-2.4.0
RVERSION= 2.4.0
RVER= 2040
RUSER= C:\Documents and Settings\Ronald
Loading the R DLL C:\Program Files\R\R-2.4.0\bin\R.dll .. Done.
Loading Rpy version 2040 .. Done.
Creating the R object 'r' ..  Done
Traceback (most recent call last):
  File "rpy-test2.py", line 9, in ?
    r.kmeans(a, 2, 5, 10, "Forgy")
rpy.RException: Error in as.double.default(x) : (list) object cannot be
coerced
to 'double'
----
Hope you can shed more light on it.

Many thanx for your efforts - Geofram


On 12/21/06, Kent Johnson <kent37 at tds.net> wrote:
>
> Geoframer wrote:
> > R is a statistical language and Rpy is the python interface for it.
> > However somehow I'm failing to see a step in the python code with which
> I
> > address the R language.
> >
> > in R I can do :
> >
> > a=diag(10)                              #produces an identity matrix of
> > size 10
> > b=kmeans(a,2,5,10,"Forgy")    #calculate a kmeans clustering algorithm
> > on the 10 vectors contained by the matrix just declared.
> >
> >
> > in Ipython this does :
> >
> > ---------
> > In [1]: from rpy import *
> > RHOME= C:\Program Files\R\R-2.4.0
> > RVERSION= 2.4.0
> > RVER= 2040
> > RUSER= C:\Documents and Settings\Ronald
> > Loading the R DLL C:\Program Files\R\R-2.4.0\bin\R.dll .. Done.
> > Loading Rpy version 2040 .. Done.
> > Creating the R object 'r' ..  Done
> >
> > In [2]: a = r.diag(10)
> >
> > In [3]: b = r.kmeans(a,2,10,5,"Forgy")
> >
> ---------------------------------------------------------------------------
> > rpy.RException                                Traceback (most recent
> > call last)
> >
> > C:\Python24\<ipython console>
> >
> > RException: Error in as.double.default(x) : (list) object cannot be
> > coerced to '
> > double'
> > ---------
>
> This seems to work, it keeps a in the internal R representation instead
> of converting it to a list of lists:
>
> In [1]: from rpy import *
> RHOME= C:\Program Files\R\R-2.3.1
> RVERSION= 2.3.1
> RVER= 2031
> RUSER= G:\
> Loading the R DLL C:\Program Files\R\R-2.3.1\bin\R.dll .. Done.
> Loading Rpy version 2031 .. Done.
> Creating the R object 'r' ..  Done
>
> In [22]: aa=with_mode(NO_CONVERSION, r.diag)(10)
>
> In [25]: b=r.kmeans(aa,2,10,5,"Forgy")
>
> In [26]: b
> Out[26]:
> {'centers': [[0.1111111111111111,
>                0.1111111111111111,
>                0.1111111111111111,
>                0.1111111111111111,
>                0.0,
>                0.1111111111111111,
>                0.1111111111111111,
>                0.1111111111111111,
>                0.1111111111111111,
>                0.1111111111111111],
>               [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0]],
>   'cluster': [1, 1, 1, 1, 2, 1, 1, 1, 1, 1],
>   'size': [9, 1],
>   'withinss': [8.0000000000000018, 0.0]}
>
> > I've tried numerous things to get it to work, but i basically can not
> > find out how i do something as simple as the two statements in R in
> > RPython. Apparently something is going wrong somewhere in the conversion
> > of python objects to R objects but i can't seem to fix it. There is a
> > code snippet in the RPy-reference manual but it's only valid for python
> > 2.2 and 2.1 and i couldn't get it to work on 2.4.
>
> Where is the snippet?
>
> Cheers,
> Kent
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/tutor/attachments/20061222/172beb74/attachment.html 


More information about the Tutor mailing list