如何通过 pyRserve 调用名称中带点的 R 函数?
How to call an R function with a dot in its name by pyRserve?
pyRserve 模块在与来自 python 的 Rserve 会话交互时非常方便。
您可以通过在其名称前加上 "conn.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 R 绑定)的答案。
最后我找到了一个受此启发的解决方案 thread:
as_integer = getattr(conn.r, 'as.integer')
conn.r.sapply(conn.ref.List, as_integer)
Out[8]: array([1, 2, 3], dtype=int32)
pyRserve 模块在与来自 python 的 Rserve 会话交互时非常方便。
您可以通过在其名称前加上 "conn.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 R 绑定)的答案。
最后我找到了一个受此启发的解决方案 thread:
as_integer = getattr(conn.r, 'as.integer')
conn.r.sapply(conn.ref.List, as_integer)
Out[8]: array([1, 2, 3], dtype=int32)