我正在嘗試制作一個名為“ Models”的串列,其中包含 10 個模型的串列。
這是我正在使用的代碼。(輸入解釋器)
models=list()
for (degree in 1:10){
myFormula=as.formula(paste0("nox ~ poly(dis, ",degree,")"))
myModel=lm(myFormula,data=Boston)
print(deviance(myModel))
models=append(models,myModel)
}
由于某種原因,這之后的模型長度是 120 而不是 10。我習慣了 python,其中 append 陳述句只會添加一個物件,它們都是不同的。
我不知道為什么這不起作用或如何正確地做到這一點。
uj5u.com熱心網友回復:
你也可以使用lapply
models = lapply(1:10, function(degree) {
myFormula=as.formula(paste0("nox ~ poly(dis, ",degree,")"))
lm(myFormula,data=Boston)
})
如果你想要每個模型的偏差,你可以這樣做:
lapply(models, deviance)
或等效地
lapply(models, function(mod) deviance(mod))
您也可以像這樣在原始回圈中回傳模型及其偏差(作為串列);請注意,這將回傳一個串列串列。結果models是 10 個元素長(每個元素一個degree),每個元素本身都是一個串列(這是一個命名串列),第一個元素是模型,第二個元素是方差
models = lapply(1:10, function(degree) {
myFormula=as.formula(paste0("nox ~ poly(dis, ",degree,")"))
mod = lm(myFormula,data=Boston)
list(model = mod, deviance=deviance(mod))
})
uj5u.com熱心網友回復:
我們可以使用添加元素到串列中c,
models=list()
for (degree in 1:10){
myFormula=as.formula(paste0("nox ~ poly(dis, ",degree,")"))
myModel=lm(myFormula,data=Boston)
print(deviance(myModel))
models= c(models,list(myModel))
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/446705.html
