使用rpy2映射python元组和R列表?

我在理解rpy2对象和python对象的映射时遇到了一些麻烦.

我有一个函数(x)在python中返回一个元组对象,我想用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"))')

FAIL有错误:
 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’对象不支持项目分配

你能帮我理解吗?
非常感谢 !!

解决方法:

使用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.frame.您不能使用类似于robjects.r.data.frame的符号在Python中访问此类符号,因为Python以不同于R的方式解释周期.因此我建议完全避免使用此表示法,而是使用
robjects.r [‘data.frame’],因为无论符号名称是什么,这种表示法都有效.

上一篇:Java Tuple2使用accessor方法和直接调用变量之间的区别


下一篇:Python:列表索引必须是整数,而不是元组