如何使用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"))')
结果失败,出现错误: 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' 对象不支持项赋值
你能帮我理解一下吗?非常感谢!!
2 个回答
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)
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.frame
。你不能用类似 robjects.r.data.frame
的方式在 Python 中访问这些符号,因为 Python 对句点的理解和 R
不一样。所以我建议完全避免这种写法,改用 robjects.r['data.frame']
,因为这种写法无论符号名称是什么都能正常工作。