在改变最大迭代次数的同时,如何使GLM适合Julia?

在改变最大迭代次数的同时,如何使GLM适合Julia?,julia,Julia,我试图使用Julia的GLM包拟合广义线性模型。拟合算法失败,因为超过了默认设置为30的最大迭代次数。对源代码的检查表明,此参数存储为fit函数的命名参数(maxIter),如果glm的dofit命名参数为true(默认情况下),则在glm函数末尾调用该函数。因此,我应该能够通过将dofit设置为false来调整最大迭代次数,创建我的glm,然后使用修改后的maxIter手动调用fit: myGlm = glm(formula, dataframe, Poisson(), dofit=false

我试图使用Julia的GLM包拟合广义线性模型。拟合算法失败,因为超过了默认设置为30的最大迭代次数。对源代码的检查表明,此参数存储为
fit
函数的命名参数(
maxIter
),如果
glm
dofit
命名参数为
true
(默认情况下),则在
glm
函数末尾调用该函数。因此,我应该能够通过将
dofit
设置为
false
来调整最大迭代次数,创建我的glm,然后使用修改后的
maxIter
手动调用
fit

myGlm = glm(formula, dataframe, Poisson(), dofit=false)
fit(myGlm, maxIter=50)
但此代码的第一行失败,并显示错误消息:

无方法glm(数组{Any,1},Expr,数据帧,泊松,LogLink)


当我在源代码(glmfit.jl)或使用
help(glm)
查看
glm
的函数签名时,确实没有列出此签名。但是为什么这是我函数调用的签名呢?命名参数是否作为数组自动移动到参数列表的开头,是否需要显式支持它们?上下文中的源建议我的调用应该可以工作。

看起来关键字参数没有在中传递


如果是这样,您应该提交并发出,同时向调用传递一个link函数,以便调用main
glm
函数,而不是便利构造函数。

感谢您的回复。我尝试了
glm(公式,数据帧,泊松(),LogLink(),dofit=false)
但是我得到了相同的错误,这很奇怪,因为正如您指出的,这似乎应该触发主glm函数。我将提出一个问题。这看起来确实很奇怪。我认为最简单的方法是为
maxIter
glm
添加一个关键字参数,然后将其传递到
glm
最后一行的
fit
。我怀疑Doug会很乐意接受一个添加了该功能的补丁。@JohnMylesWhite-Hmm,但是还有三个其他关键字arg用于
fit
verbose
convTol
,和
minStepFac
。仅将
maxIter
添加到
glmfit
可能会使代码更加混乱,添加上述所有内容似乎是不必要的重复。有没有办法在函数调用中将Dict扩展为关键字参数?然后我可以将关键字arg
fitoptions
添加到
glm
中,并使用
fit(res,fitoptions…
将其传递到glm最后一行的
fit
。我知道
语法无法扩展
Dict
,但有办法吗?现在唯一的办法是使用如下内容传入任意数量的关键字:
函数glm(;kwargs;fit(kwargs);结束
。这基本上是从所有关键字参数生成一个dict。我认为我们仍然缺少一个有用的抽象,但它可能不会是Dict,因为它们在编译时不能完全分析。@JohnMylesWhite谢谢John。当我创建一个函数
foo(;kwargs)
并查看函数内部的
kwargs
时,我看到一个2元组数组,其中第一个元素是符号(关键字)。我不知道如何像
Dict
一样访问此文件。然后,将此数组传递给另一个函数(如
fit(kwargs)
)只需将其作为普通参数传递,而不进行扩展。这是你的本意吗?