我正在尝试为statsmodels公式API编写包装器(这是一个简化版,该函数还有其他功能):
import statsmodels.formula.api as smf
def wrapper(formula, data, **kwargs):
return smf.logit(formula, data).fit(**kwargs)
如果我将这个函数交给一个用户,然后他/她试图定义自己的函数:
def square(x):
return x**2
model = wrapper('y ~ x + square(x)', data=df)
他们将收到一个
NameError
,因为patsy
模块在wrapper
的命名空间中寻找函数square
。有没有一种安全的、Pythonic的方法来处理这种情况,而不需要预先知道函数名或需要多少个函数?FYI:这是针对Python 3.4.3的。
statsmodels.base.model.Model.from_formula
的文档字符串描述了一个eval_env
关键字参数,你可以通过它递增1。from_formula
被所有或大多数模型继承。 - Josefstatsmodels.basedata.ModelData.__setstate__
尝试在反序列化时重新创建公式和设计。我根据一些示例进行了试错编写。 - Josefeval_env = 2
,2.) 这是传递给logit(..)
而不是fit(...)
的关键字参数。(虽然你没有暗示它是,但我之前没有意识到)。 - chriswhite