R-将patsy.dmatrices()与网状结构一起使用

R-将patsy.dmatrices()与网状结构一起使用,r,patsy,reticulate,R,Patsy,Reticulate,我在尝试将函数patsy.dmatrices()与networkiteR包一起使用时遇到了名称空间问题 以下是一个简单的可复制示例: patsy <- import("patsy") # Data dataset <- data.frame(Y=rnorm(1000,2.5,1)) # Null model formula_null <- "I(Y-1) ~ 1" dmat = patsy$dmatrices(formula_null, data=dataset, NA_act

我在尝试将函数
patsy.dmatrices()
networkite
R包一起使用时遇到了名称空间问题

以下是一个简单的可复制示例:

patsy <- import("patsy")
# Data
dataset <- data.frame(Y=rnorm(1000,2.5,1))
# Null model
formula_null <- "I(Y-1) ~ 1"
dmat = patsy$dmatrices(formula_null, data=dataset, NA_action="drop",
                                         return_type="dataframe")
我认为这与名称空间(cf)有关,可以通过使用function
dmatrices()
eval_env
参数来修复名称空间,但我不知道如何修复

当我们想在R中使用Python
statsmodels
包时,这是一个很大的问题,该包使用了公式的
patsy


谢谢你的帮助,

我不确定,但我认为你对名称空间的猜测是正确的,这是patsy和Networkite之间的不幸互动。默认情况下,patsy尝试查看调用者的作用域,以计算公式中任何无法识别的函数/变量(就像R公式函数一样)。这需要使用Python的堆栈内省来查看调用方的作用域。但是,由于调用者使用的是完全不同的语言,这几乎肯定不会起作用

使用
eval_env
参数到
dmatrices
可以覆盖patsy读取调用方名称空间的正常行为。(.)试试这个:

dmat = patsy$dmatrices(formula_null, data=dataset, NA_action="drop",
                       return_type="dataframe",
                       # New:
                       eval_env=patsy$EvalEnvironment(c())
                       )
我们的想法是在这里创建一个空的
EvalEnvironment
对象,并告诉patsy使用它,而不是试图读取调用方的环境

我不熟悉Networkite,因此您可能需要调整以上内容才能正常工作–在Python中,等效内容是:

dmat = patsy.dmatrices(formula_null, data=dataset, NA_action="drop",
                       return_type="dataframe",
                       eval_env=patsy.EvalEnvironment([])

特别是,如果netracite没有将
c()
转换为空列表,那么您将需要找到可以转换的内容。(也许可以试试
patsy$EvalEnvironment(list())
?)

谢谢,这完全是一个救命稻草!
dmat = patsy.dmatrices(formula_null, data=dataset, NA_action="drop",
                       return_type="dataframe",
                       eval_env=patsy.EvalEnvironment([])