簡體   English   中英

如何通過pyRserve調用名稱為點的R函數?

[英]How to call an R function with a dot in its name by pyRserve?

當從python與Rserve會話進行交互時,pyRserve模塊非常方便。

您可以通過在R對象的名稱前面加上“ 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)

還有其他更有效的方式嗎?

注意:我意識到在另一個SO線程中,有人問過類似的問題是rpy2模塊的答案(另一個python R綁定)。

終於我找到了一個受此線程啟發的解決方案:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM