Как вызвать функцию R с точкой в ​​имени с помощью pyRserve?

Модуль pyRserve очень удобен при взаимодействии с сеансом Rserve из python.

Вы получаете доступ к объекту R, добавляя префикс к его имени с выражением вроде «conn.r» или «conn.ref».

import pyRserve
import numpy
conn = pyRserve.connect()
conn.r.List = [1.1, 2.2, 3.3]
conn.r.sapply(conn.ref.List, conn.ref.sqrt)
Out[23]: array([ 1.04880885,  1.4832397 ,  1.81659021])

Но это не сработает, если в имени функции есть точка,

conn.r.sapply(conn.ref.List, conn.ref.as.integer)
    conn.r.sapply(conn.ref.List, conn.ref.as.integer)
                                           ^
SyntaxError: invalid syntax

единственное решение, которое я придумал, - это обернуть все выражение R в строку и запустить его с помощью функции eval:

conn.eval('result = as.integer(List)')
conn.r.result
Out[46]: array([1, 2, 3], dtype=int32)

Есть ли более продуктивный способ сделать это?

Примечание. Я понял в другой SO thread аналогичный вопрос был задан для модуля rpy2 (еще одна привязка python R).


person Madcat    schedule 23.01.2015    source источник


Ответы (1)


наконец, я нашел решение, вдохновленное этим поток:

as_integer = getattr(conn.r, 'as.integer')
conn.r.sapply(conn.ref.List, as_integer)
Out[8]: array([1, 2, 3], dtype=int32)
person Madcat    schedule 24.01.2015