Patsy 的幂不允许负整数,所以,如果我们有一些系列数据X,
patsy.dmatrices('X + X**(-1)', X)
Run Code Online (Sandbox Code Playgroud)
返回错误。我如何将 X 的倒数添加到这样一个 patsy 公式中?
运算符的特殊含义在嵌入式函数调用中被关闭;因此,如果您编写,X + 1 / x则 patsy 将其解释为特殊的 patsy+和/运算符,但如果您编写类似 的内容X + sin(1 / X),则 patsy 继续将 the 解释+为特殊的 patsy 运算符,但整个sin(1 / X)表达式将传递给 Python 进行计算,Python 将计算/作为常规划分。
所以如果我们想计算sin(1 / X). 但我们没有(我们为什么要这样做?)。我们只想要普通的1 / X。那我们怎么做呢?
好吧,我们可能会很棘手:我们需要一个函数调用来欺骗 patsy 的解析器忽略/并将其提供给 Python —— 但是没有任何内容表明该函数必须执行任何操作。我们可以定义一个识别函数:
def identity(value):
return value
Run Code Online (Sandbox Code Playgroud)
然后在像X + identity(1 / X).
而事实上,这一招是如此得心应手那懦夫已经预定义的功能给你,并将它作为一个内置的叫I(...)。通常,您可以将其I(...)视为一种引用运算符——它是一种说“嘿,patsy,请不要尝试解释该区域中的任何内容,只需将其传递给 Python kthx”的一种方式。
所以要回答你原来的问题:试着写作 dmatrix("X + I(1 / X)", data)
(下一个问题:为什么对函数I和所有东西进行这种奇怪的 hack ?答案是 R 30 年前就是这样做的,我想不出有什么比破坏兼容性更好的方法了。)
| 归档时间: |
|
| 查看次数: |
1334 次 |
| 最近记录: |