4

rpy2 オブジェクトと python オブジェクトのマッピングを理解するのに苦労しています。

Python でタプル オブジェクトを返す関数 (x) があり、このタプル オブジェクトを R オブジェクト リストまたはベクトルにマップしたいと考えています。

まず、私はこれをやろうとしています:

# return a python tuple into this r object tlist
robjects.r.tlist = get_max_ticks(x) 

#Convert list into dataframe
r('x <- as.data.frame(tlist,row.names=c("seed","ticks"))')

エラーで失敗: rinterface.RRuntimeError: eval(expr、envir、enclos) のエラー: オブジェクト 'tlist' が見つかりません

だから私は他の戦略を試しています:

robjects.r["tlist"]  = get_max_ticks(x)
r('x <- as.data.frame(tlist,row.names=c("seed","ticks"))')

このエラーで失敗: TypeError: 'R' オブジェクトは項目の割り当てをサポートしていません

理解していただけますか?どうもありがとう !!

4

2 に答える 2

3

使用globalEnv:

import rpy2.robjects as ro
r=ro.r

def get_max_ticks():
    return (1,2)
ro.globalEnv['tlist'] = ro.FloatVector(get_max_ticks())
r('x <- as.data.frame(tlist,row.names=c("seed","ticks"))')
print(r['x'])
#       tlist
# seed      1
# ticks     2

Rこのタイプの表記法で名前空間のシンボルにアクセスすることは可能かもしれませrobjects.r.tlistんが、この方法で値を割り当てることはできません。シンボルを割り当てる方法は、 を使用することrobject.globalEnvです。

さらに、 の一部の記号にRは、 などのピリオドが含まれる場合がありますdata.framerobjects.r.data.framePython はピリオドを とは異なる方法で解釈するため、Python ではと同様の表記法を使用してそのような記号にアクセスすることはできませんR。したがって robjects.r['data.frame']、この表記法はシンボル名に関係なく機能するため、この表記法を完全に回避し、代わりに を使用することをお勧めします。

于 2010-07-21T15:26:50.240 に答える
0

R での割り当てをまとめて回避することもできます。

import rpy2.robjects as ro
tlist = ro.FloatVector((1,2))
keyWordArgs = {'row.names':ro.StrVector(("seed","ticks"))}
x = ro.r['as.data.frame'](tlist,**keyWordArgs)
ro.r['print'](x)
于 2010-07-21T15:45:13.583 に答える