我使用以下代码创建主题模型列表,其中主题数量范围从26到35,乘以1:
best.model <- lapply(seq(26,35, by=1), function(d){LDA(dtm2, d, method = "Gibbs", control = list(burnin = burnin, iter = iter, keep = keep))})
当我打电话给best.model时,我得到:
> best.model
[[1]]
A LDA_Gibbs topic model with 26 topics.
[[2]]
A LDA_Gibbs topic model with 27 topics.
[[3]]
A LDA_Gibbs topic model with 28 topics.
[[4]]
A LDA_Gibbs topic model with 29 topics.
[[5]]
A LDA_Gibbs topic model with 30 topics.
[[6]]
A LDA_Gibbs topic model with 31 topics.
[[7]]
A LDA_Gibbs topic model with 32 topics.
[[8]]
A LDA_Gibbs topic model with 33 topics.
[[9]]
A LDA_Gibbs topic model with 34 topics.
[[10]]
A LDA_Gibbs topic model with 35 topics.
然后我尝试将每个主题模型提取到单独的对象中:
Gibbs26 <- best.model[1]
Gibbs27 <- best.model[2]
Gibbs28 <- best.model[3]
Gibbs29 <- best.model[4]
Gibbs30 <- best.model[5]
Gibbs31 <- best.model[6]
Gibbs32 <- best.model[7]
Gibbs33 <- best.model[8]
Gibbs34 <- best.model[9]
Gibbs35 <- best.model[10]
但是,当我调用每个模型的类时,我得到:
class(Gibbs26)
[1] "list"
如何从最初的best.model列表中提取每个元素,并让每个元素成为一个我可以轻松操作的对象?
答案 0 :(得分:2)
你有两个问题。首先正如@JasonAizkalns在评论中所提到的,当你想要两个时,你只使用一个支架:
Gibbs26 <- best.model[[1]]
其次,你真的不想输入那么多东西,因为你不可避免地要搞砸了。相反,您可以使用lapply
和assign
分配所有对象:
lapply(1:length(bestmodel), function(x){assign(paste0("Gibbs", x + 25), bestmodel[[x]], envir = .GlobalEnv)})