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

发布于 2024-09-10 23:33:00 字数 658 浏览 10 评论 0原文

我在理解 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'对象不支持项目分配

你能帮我理解吗? 多谢 !!

I'm having some trouble to understand the mapping with rpy2 object and python object.

I have a function(x) which return a tuple object in python, and i want to map this tuple object with R object list or vector.

First, i'm trying to do this :

# 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 with error :
rinterface.RRuntimeError: Error in eval(expr, envir, enclos) : object 'tlist' not found

So i'm trying an other strategy :

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

FAIL with this error :
TypeError: 'R' object does not support item assignment

Could you help me to understand ?
Thanks a lot !!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

扮仙女 2024-09-17 23:33:00

使用 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'],因为无论符号名称是什么,此表示法都有效。

Use 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

It may be possible to access symbols in the R namespace with this type of notation: robjects.r.tlist, but you can not assign values this way. The way to assign symbol is to use robject.globalEnv.

Moreover, some symbols in R may contain a period, such as data.frame. You can not access such symbols in Python using notation similar to robjects.r.data.frame, since Python interprets the period differently than R. So I'd suggest avoiding this notation entirely, and instead use
robjects.r['data.frame'], since this notation works no matter what the symbol name is.

软甜啾 2024-09-17 23:33:00

您还可以一起避免 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)

You could also avoid the assignment in R all together:

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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文