问题可能在于您如何将控制参数列表传递给 Griffiths2004 函数。
在 Griffiths2004 函数中,参数在使用control$param 的列表中寻址。但是,lda_5@control 返回一个 S4 对象,其中参数应使用control@param 寻址。 (An S4 object 是 R 中的一个高级类,但对于这个应用程序而言,唯一重要的区别是,我们使用 @ 而不是 $ 来寻址这些列表中的对象)
调用时可以看到lda@control是一个S4对象:
> lda@control
An object of class "LDA_Gibbscontrol"
Slot "delta":
[1] 0.1
Slot "iter":
[1] 2100
Slot "thin":
[1] 2000
Slot "burnin":
[1] 100
...
它拥有所谓的槽而不是简单的列表名称。
您可以通过将控制参数作为列表传递给 LDA 模型来避免遇到的问题。
这是一个例子:
library('Rmpfr')
library("topicmodels")
library("ldatuning")
# create LDA model with Gibbs sampling
data("AssociatedPress", package="topicmodels")
dtm <- AssociatedPress[1:10, ]
# pass controls as a list (otherwise it does not work!)
controls = list(burnin = 100, iter = 2000, keep = 500, alpha = 0.1)
# get model and pass controls list
lda <- LDA(AssociatedPress[1:20,], k = 2, method = "Gibbs",
control = controls)
# Griffith score:
Griffiths2004(list(lda), controls)
# Output:
[1] -30355.28
在列表中传递 lda 模型也很重要,因为 Griffiths2004 函数会遍历模型列表。
同时确保您已为 ldatuning 包中使用的 Rmpfr 包安装了所有其他依赖项。