Как вызвать функцию 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 подобный вопрос был задан для модуля rpy2 (еще одна привязка Python R).
1 ответ
Решение
Наконец я нашел решение, которое вдохновлено этой веткой:
as_integer = getattr(conn.r, 'as.integer')
conn.r.sapply(conn.ref.List, as_integer)
Out[8]: array([1, 2, 3], dtype=int32)