我正在使用rpy2軟件包將一些R功能引入python。 我在R中使用的函數需要一個data.frame對象,並使用rlike.TaggedList,然後使用robjects.DataFrame,我可以使這個工作。在python中用低級別rpy2創建R data.frame
但是我有性能問題,具有完全相同的數據,這使我嘗試使用rpy2低層次接口這裏提到比較完全相同的R裏面的函數時 - 到目前爲止http://rpy.sourceforge.net/rpy2/doc-2.3/html/performances.html
我已嘗試:
- 使用TaggedList與FloatSexpVector對象而不是numpy數組和DataFrame對象。
通過使用字典這樣轉儲TaggedList和數據框類:
d = dict((var_name, var_sexp_vector) for ...) dataframe = robjects.r('data.frame')(**d)
兩人都沒有得到我任何明顯的加速。我已經注意到DataFrame對象可以在它們的構造函數中獲得一個rinterface.SexpVector,所以我曾想過創建一個這樣的命名向量,但我不知道如何放入名稱(在RI中知道它的正義名稱(vec)= c('a','b'...))。
我該怎麼做?有另一種方法嗎? 有沒有簡單的方法來分析rpy本身,所以我可以知道瓶頸在哪裏?
編輯:
下面的代碼似乎在較新的RPY工作的偉大(X4更快)(2.2.3)
data = ro.r('list')([ri.FloatSexpVector(x) for x in vectors])[0]
data.names = ri.StrSexpVector(vector_names)
但是它不能在2.0.8版本(最後一個由windows支持),因爲R似乎不能夠使用以下名稱:「eval(expr,envir,enclos)中的錯誤:未找到對象'y'」
想法?
編輯#2: 有人做建設rpy2.3二進制的Windows(Python 2.7版)的精細作業,所提到的(我的代碼幾乎快5233)的偉大工程與它
鏈接: https://bitbucket.org/breisfeld/rpy2_w32_fix/issue/1/binary-installer-for-win32
最新發布的rpy2是2.2.6。不要使用2.0.8,不管原因。 – lgautier 2012-07-18 18:54:50