pyRserve模块在与python的Rserve交互时非常方便。
通过在R对象的名称前缀加上“con.r”或"conn.ref“之类的表达式来访问R对象
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)还有什么更有成效的方法吗?
注意:我在another SO thread中意识到,类似的问题已经被问到rpy2模块(另一个python绑定)的答案。
发布于 2015-01-24 04:07:35
最后,我找到了一个灵感来自于这个thread的解决方案
as_integer = getattr(conn.r, 'as.integer')
conn.r.sapply(conn.ref.List, as_integer)
Out[8]: array([1, 2, 3], dtype=int32)https://stackoverflow.com/questions/28110689
复制相似问题