Ich bin versucht, einen Wrapper für die statsmodels Formel API zu schreiben (dies ist eine vereinfachte Version, die Funktion ist mehr als diese):Fragen Namespace beim Aufruf von Patsy innerhalb einer Funktion
import statsmodels.formula.api as smf
def wrapper(formula, data, **kwargs):
return smf.logit(formula, data).fit(**kwargs)
Wenn ich diese Funktion geben an einen Benutzer, der dann seine/ihre eigene Funktion zu definieren versucht:
def square(x):
return x**2
model = wrapper('y ~ x + square(x)', data=df)
werden sie ein NameError
weil das patsy
Modul sucht im Namensraum von wrapper
für die Funktion square
erhalten. Gibt es einen sicheren, pythonischen Weg, um mit dieser Situation umzugehen, ohne a priori zu wissen, was die Funktionsnamen sind oder wie viele Funktionen benötigt werden?
FYI: Dies ist für Python 3.4.3.
Ich kenne nicht die Details (zu viel Magie für meinen Geschmack), aber die 'statsmodels.base.model.Model.from_formula' Docstring beschreibt eine' eval_env' kwd in ** kwarg, die Sie inkrementell erhöhen können by 1. 'from_formula' wird von allen oder den meisten Modellen vererbt. – user333700
Ja, ich habe es versucht; schien nicht zu funktionieren, aber vielleicht habe ich es nicht richtig genannt. – chriswhite
Haben Sie versucht, es auf 3 zu setzen? In einem ähnlichen Fall habe ich try..except wraping verwendet, um herauszufinden, in welcher Tiefe Benutzerfunktionen sind. – user333700