首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过pyRserve调用名字中有点的R函数?

如何通过pyRserve调用名字中有点的R函数?
EN

Stack Overflow用户
提问于 2015-01-23 13:11:44
回答 1查看 325关注 0票数 0

pyRserve模块在与python的Rserve交互时非常方便。

通过在R对象的名称前缀加上“con.r”或"conn.ref“之类的表达式来访问R对象

代码语言:javascript
复制
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])

但是如果函数名中有一个点,这是行不通的,

代码语言:javascript
复制
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函数运行它:

代码语言:javascript
复制
conn.eval('result = as.integer(List)')
conn.r.result
Out[46]: array([1, 2, 3], dtype=int32)

还有什么更有成效的方法吗?

注意:我在another SO thread中意识到,类似的问题已经被问到rpy2模块(另一个python绑定)的答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-24 04:07:35

最后,我找到了一个灵感来自于这个thread的解决方案

代码语言:javascript
复制
as_integer = getattr(conn.r, 'as.integer')
conn.r.sapply(conn.ref.List, as_integer)
Out[8]: array([1, 2, 3], dtype=int32)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28110689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档