我想用lapply()R来计算几个模型,但似乎该update()函数无法处理通过生成的模型lapply().
一个最小的例子:
d1 <- data.frame(y = log(1:9), x = 1:9, trt = rep(1:3, each = 3))
f <- list(y ~ 1, y ~ x, y ~ trt)
modsa <- lapply(f, function(formula) glm(formula, data = d1))
modsb <- lapply(f, glm, data = d1)
update(modsa[[1]], data = d1[1:7, ])
#> Error: object of type 'closure' is not subsettable
update(modsb[[1]], data = d1[1:7, ])
#> Error in FUN(formula = X[[i]], data = d1[1:7, ]): could not find function "FUN"
Run Code Online (Sandbox Code Playgroud)
有没有办法可以update()处理通过生成的模型lapply()?
Esther 是正确的,问题出在 glm 的 call 元素上。从?update:
\n\n\n\xe2\x80\x98update\xe2\x80\x99 将更新并(默认情况下)重新拟合模型。它通过提取存储在对象中的调用、更新调用并(默认情况下)评估该调用来实现此目的。
\n
如前所述,还可以更新包括公式:
\n\nupdate(modsa[[1]], data = d1[1:7, ], formula=f[[1]])\nRun Code Online (Sandbox Code Playgroud)\n\n如果由于某种原因这不方便,以下是如何运行lapply()并让它直接将正确的公式分配给调用元素:
modsa <- lapply(f, function(formula) eval(substitute(glm(F, data = d1), list(F=formula))))\nRun Code Online (Sandbox Code Playgroud)\n\n这会将相应的公式替换为 glm 调用,然后对其进行评估。有了这条长单线,您就可以update(modsa[[1]], data = d1[1:7, ])毫无问题地跑步。
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |