Tuesday 13 July 2010

Calling Python from R

The new R package, rJython, permits calling Python from R. It is not on CRAN yet, but it will be soon. Details about the package (installation from r-forge, architectural details, etc.) can be found here.

Sunday 4 July 2010

Passing arguments to Python functions

I found a good reference on how to pass arguments to Python functions using the star (or star-star) notation. You can find it here. Here goes a summary.

If you want to pass unnamed arguments, you can do as follows:

>>> a = (1,5)
>>> range( *a )
[1, 2, 3, 4]


If you want to pass named arguments, you need dictionaries:

>>> a = range( 1, 4 )
>>> b = range( 4, 8 )
>>> def concat( a, b ): return a + b
...
>>> concat( **dict( a = a, b = b ) )
[1, 2, 3, 4, 5, 6, 7]


You can mix named and unnamed arguments thus:

my_foo( *a, **b )

where a and b are a list and a dictionary. Caution needs to be taken to pass a single unnamed argument, though. Details can be found in the reference above.

Passing arguments to Python functions

I found a good discussion on how to pass vectors and dictionaries as arguments to Python functions. It can be found here.

In summary, for unnamed arguments:

>>> a = (1,4)
>>> range( *a )
[1, 2, 3]


And for named arguments:

>>> def concat(a,b): return a + b
...
>>> a = [1,2,3]
>>> b = range( 4,7)
>>> b
[4, 5, 6]
>>> concat(**dict( a = a, b = b ) )
[1, 2, 3, 4, 5, 6]


Named and unnamed arguments can be mixed:

my_foo( *a, **b )

There is only one caveat with functions requiring a single, unnamed argument. See the link above for details.