gpt4 book ai didi

python - 如何在rpy2中使用R的赋值方法?

转载 作者:太空宇宙 更新时间:2023-11-04 10:10:13 25 4
gpt4 key购买 nike

我正在使用 rpy2,我需要对 R 对象使用赋值方法。例如,从这个对象开始:

# Python code
from rpy2.robjects import r
myvar = r('c(a=1,b=2,c=3)')

假设我想分配给names(myvar) . (注意:请忽略 rpy2 提供了另一种通过 myvar.names 访问名称的方法。这仅适用于名称,不适用于任意分配方法。)在 R 中,我会这样做:

# R code
names(myvar) <- c("x", "y", "z")

但是,这在 Python 中不起作用:

# Python code
> names(myvar) = ['x', 'y', 'z']
In [62]: names(myvar) = ['x', 'y', 'z']
File "<ipython-input-62-aa3f7998cdcb>", line 1
names(myvar) = ['x', 'y', 'z']
^
SyntaxError: can't assign to function call

当然,我可以通过 rpy2 的字符串 eval 运行任意代码:

# Python code
r('''names(myvar) <- c("x", "y", "z")''')

但是将值插入要评估的字符串中听起来既不有趣也不安全。那么有没有办法安全地做相当于 method(object) <- value 的事情呢?通过 rpy2?

最佳答案

在 R 中,“setter”函数遵循命名约定,即“getter”的名称后跟 <-。 .例如,当做

names(myvar) <- c("x", "y", "z")

发生以下情况:

myvar <- "names<-"(myvar, c("x","y","z"))

如果我们分解它:

> myvar = c(a=1,b=2,c=3)
> # call the assignment function "names<-"
> "names<-"(myvar, c("x","y","z"))
x y z
1 2 3
> # the "names" are stored as an attribute
> attributes(myvar)
$names
[1] "x" "y" "z"
> attributes(myvar)$names <- c("a","b","c")
> myvar
a b c
1 2 3
> # note that the function does have a side effect
> # (unlike what I wrote in a previous version of this answer):
> # the names are changed in place. I think that this is a C-level
> # optimization specific to "names" and this may not always be
> # the case for all "setters"
> "names<-"(myvar, c("x","y","z"))
x y z
1 2 3
> myvar
x y z
1 2 3

做类似 method(object) <- value 的事情来自 rpy2 很简单。 python 代码看起来像:

set_method = r("`method<-`")
my_object = set_method(my_object, value)

关于python - 如何在rpy2中使用R的赋值方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38806898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com