Я не уверен, но я думаю, что ваше предположение о пространствах имен правильное, и это неудачное взаимодействие между патсом и сеткой.По умолчанию, patsy пытается заглянуть в область действия вызывающего, чтобы оценить любые нераспознанные функции / переменные в формуле (как это делают функции формулы R).Для этого необходимо использовать интроспекцию стека Python, чтобы взглянуть на область действия вызывающего.Но поскольку вызывающая сторона полностью находится на другом языке, это почти наверняка не сработает.
Можно изменить обычное поведение Пэтси при чтении пространства имен вызывающей стороны, используя аргумент eval_env
для * 1004.*.( Docs .) Попробуйте это:
dmat = patsy$dmatrices(formula_null, data=dataset, NA_action="drop",
return_type="dataframe",
# New:
eval_env=patsy$EvalEnvironment(c())
)
Идея состоит в том, что здесь мы создаем пустой объект EvalEnvironment
и говорим patsy использовать его вместо попытки прочитать среду вызывающего..
Я не знаком с сеткой, поэтому вам может понадобиться настроить вышеприведенное для работы - в Python эквивалент будет:
dmat = patsy.dmatrices(formula_null, data=dataset, NA_action="drop",
return_type="dataframe",
eval_env=patsy.EvalEnvironment([])
В частности, если сетка не работаетконвертируйте c()
в пустой список, тогда вы захотите найти что-нибудь подходящее.(Может попробовать patsy$EvalEnvironment(list())
?)