4

私はRとrpy2の両方に不慣れです。次の例を移植しようとしています

library(MASS)  # for eqscplot  
data(topo, package="MASS")  
topo.kr <- surf.ls(2, topo)  
trsurf <- trmat(topo.kr, 0, 6.5, 0, 6.5, 50)  

rpy2に。

これまでのところ私は

import  rpy2.robjects as robjects
robjects.r('library(spatial)')  
f1 = robjects.r['surf.ls']  
x = robjects.IntVector([1,2,3])  
y = robjects.IntVector([1,2,3])  
z = robjects.IntVector([1,30,3])  
res = f1(2, x,y,z)  

結果は。になるはずだと思いますres。ただし、をres使用して印刷するprint(res.r_repr())と、評価できない式が表示されます。これに関する助けをいただければ幸いです。

4

2 に答える 2

2

次に、問題はさらに多くなります。RリストをPythonディクショナリに変換するにはどうすればよいですか(式の評価とはほとんど関係ありません)。rpy2-2.2.x(および2.3-dev)の場合:

from rpy2.robjects.vectors import ListVector
# make an R list
l = ListVector({'a': 1, 'b': 'b'})

# get a Python dict out of an R list
dict(l.iteritems())
于 2011-08-16T15:57:04.380 に答える
1

コードは正常に機能します。結果にアクセスするのに問題があると思います。結果の「res」オブジェクトは、基本的にRリストです。対応するPython辞書に変換します。

rListObj = {}
for key,val in zip(robjects.r.names(res),res):
  rListObj[key] = [i for i in val] #R Vector to List

結果:

{'f': [1.0, 1.0, 1.0, -1.0, 0.0, 1.0, 1.0, 0.0, 1.0, -1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0], 'rx': [1, 3], 'ry': [1, 3], 'np': [2], 'beta': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 'r': [-1.7320508075688772, -1.6729239521451333e-16, -1.4142135623730951, -1.1547005383792512, -5.187907395343139e-17, -0.8164965809277259, -1.6729239521451333e-16, -1.4142135623730951, 3.415236843329339e-17, nan, -1.1547005383792512, -5.187907395343139e-17, -0.8164965809277259, nan, 0.0, -1.1547005383792512, -5.187907395343139e-17, -0.8164965809277259, nan, 0.0, 0.0], 'call': [<SignatureTranslatedFunction - Python:0xb7539dec / R:0xa686cec>, <IntVector - Python:0xb7534cac / R:0xa69e788>, <IntVector - Python:0xb7534d2c / R:0xa5f72f8>, <IntVector - Python:0xb7534c2c / R:0xa5f7320>, <IntVector - Python:0xb7534bac / R:0xa5f7348>], 'y': [1, 2, 3], 'x': [1, 2, 3], 'z': [1, 30, 3], 'wz': [0.0, 0.0, 0.0]}

私はこれをやや古いバージョンのrpy2(2.1.9)に対してテストしました。おそらく、より新しいバージョンでこれを行うためのより魅力的な方法があります。

于 2011-08-14T23:18:41.043 に答える