我有一些代码可以循环运行模型。循环的每次迭代运行一个略有不同的模型,结果存储在一个变量中。什么是存储这些对象的好方法,以便我可以在循环终止后访问它们?我想过这样的事情:
fit.list <- list(n)
for (i in 1:n) {
fit <- glm(......)
fit.list[i] <- fit
}
但是然后我想访问每个模型的结果,例如,summary(fit.list[4])
或者plot(fit.list[15])
但这似乎不起作用。
我有一些代码可以循环运行模型。循环的每次迭代运行一个略有不同的模型,结果存储在一个变量中。什么是存储这些对象的好方法,以便我可以在循环终止后访问它们?我想过这样的事情:
fit.list <- list(n)
for (i in 1:n) {
fit <- glm(......)
fit.list[i] <- fit
}
但是然后我想访问每个模型的结果,例如,summary(fit.list[4])
或者plot(fit.list[15])
但这似乎不起作用。
尝试
plot(fit.list[[15]])
单个[
函数提取包含所请求组件的列表,即使该列表的长度为 1。
double[[
函数提取单个声明的组件并将其返回但不在列表中;即你得到的组件本身不是包含该组件的列表。
这是一个插图:
> mylist <- list(a = 1, b = "A", c = data.frame(X = 1:5, Y = 6:10))
> str(mylist)
List of 3
$ a: num 1
$ b: chr "A"
$ c:'data.frame': 5 obs. of 2 variables:
..$ X: int [1:5] 1 2 3 4 5
..$ Y: int [1:5] 6 7 8 9 10
> str(mylist["c"])
List of 1
$ c:'data.frame': 5 obs. of 2 variables:
..$ X: int [1:5] 1 2 3 4 5
..$ Y: int [1:5] 6 7 8 9 10
> str(mylist[["c"]])
'data.frame': 5 obs. of 2 variables:
$ X: int 1 2 3 4 5
$ Y: int 6 7 8 9 10
请注意最后两个命令输出的差异。str(mylist["c"])
说“ List of 1
”,同时str(mylist[["c"]])
说“ 'data.frame':
”。
与您plot(fit.list[15])
一起,您要求 R 绘制一个列表对象,而不是该列表元素中包含的模型。
也可以试试
fit.list <- list()
for (i in 1:5) {
counts <- c(18,17,15,20,10,20,25,13,12)
outcome <- gl(3,1,9)
treatment <- gl(3,3)
print(d.AD <- data.frame(treatment, outcome, counts))
glm.D93 <- glm(counts ~ outcome + treatment, family=poisson())
fit.list[[i]] <-glm.D93
}
注意fit.list[[i]]
而不是fit.list[i]
你有