【问题标题】:Using rpy2, how to call a fuction with a "." in the variable name?使用 rpy2,如何调用带有“.”的函数在变量名中?
【发布时间】:2019-04-11 16:21:18
【问题描述】:

我想使用 rpy2 调用 R jumps 包中的 regsubsets 函数。正弦似乎没有 python 等价物(至少不是我发现的)。

import pandas
import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri
import rpy2.robjects.packages as rpackages

pandas2ri.activate()
leaps = rpackages.importr("leaps")


x = pandas.DataFrame(np.random.randn(10,10))
y = pandas.DataFrame(np.random.randn(10))

leaps.regsubsets(x=x, y=y, nbest=10, nvmax=3, really.big=T)

调用该函数确实需要参数 really.big=T。这当然行不通,因为在 python 中 .与 R 相比,具有直接功能。(我得到“语法错误:关键字不能是表达式”)。谁能告诉我如何从 rpy2 调用它?

我曾尝试使用像 leaps.regsubsets({"x":x ... "really.big":T}) 这样的 kwargs 来做到这一点,但这也不起作用,我也不知道 R 中的“T”是什么。

好的,我发现"." gets transleted to "_".但遗憾的是它仍然不起作用,不知何故这个论点没有得到传递。

leaps.regsubsets(x=X, y=Y, nbest=10, nvmax=3, really_big=True)

仍然给我错误: RRuntimeError:

Error in leaps.exhaustive(a, really.big = really.big) : 
  Exhaustive search will be S L O W, must specify really.big=T

【问题讨论】:

  • 如果你想使用它作为标识符,你必须定义 T。对 R(或 rpy)一无所知,但如果您使用 kwargs 方法,请尝试:... "really.big": "T",或者也许leaps.T?.
  • 事实证明 R 中的 T 只是 True ——所以谜题已经解决了,但我怎么能用 python 中的 "really.big" 之类的 agrument 来调用函数呢?

标签: python r rpy2


【解决方案1】:

rpy2-2.2.x 的 cmets 中的文档链接已经很老了。当前版本的文档位于:

https://rpy2.github.io/doc/v3.0.x/html/robjects_functions.html

否则文档相当清楚地说明几乎不可能提取可以在 R 省略号 (...) 中接受的参数(这是 @CristiFati 在 cmets 中指出的)。

您可以在** 中使用语法上无效的参数名称。例如这里:

leaps.regsubsets(x=x, y=y,
                 nbest=10, nvmax=3,
                 **{'really.big': true})

【讨论】:

    猜你喜欢
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 2012-08-12
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多