首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数中的lapply、glm和速glm:参数"data“缺失,没有默认设置

函数中的lapply、glm和速glm:参数"data“缺失,没有默认设置
EN

Stack Overflow用户
提问于 2019-11-03 00:59:57
回答 1查看 279关注 0票数 3

我正在使用mtcars数据来显示我的问题。下面的代码在glm中很好地工作。它通过将vlist中的每个变量添加到glm(vs ~ mpg, family = binomial(), data = mtcars模型中来生成新的模型。

代码语言:javascript
复制
check_glm <- function(crude, vlist, data, ...){
  a <- glm(crude, data = data, family = binomial())
  lapply(vlist, function(x) update(a, as.formula(paste0(". ~ . +", x))))
}
check_glm(crude = "vs ~ mpg", vlist = c("am", "hp"), data = mtcars)

然而,当我将glm替换为speedglm时,

代码语言:javascript
复制
library(speedglm)
check_speedglm <- function(crude, vlist, data, ...){
  a <- speedglm(crude, data = data, family = binomial())
  lapply(vlist, function(x) update(a, as.formula(paste0(". ~ . +", x))))
}
check_speedglm(crude = "vs ~ mpg", vlist = c("am", "hp"), data = mtcars)

我得到了:

model.frame.default中的错误(公式= vs ~ mpg + am,data = data,drop.unused.levels = TRUE):参数"data“缺失,没有默认值。

我认为问题出在lapply线上,但我想不出解决办法。任何解决这一问题的建议都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-03 03:00:45

本质上,您正在混合可能不兼容的包方法。虽然它们同名,但这两种方法都来自不同的包,因此不同的作者出于不同的目的,并输出不同的对象(glm类与speedglm类,后者可能是S3与S4对象)。

具体来说,glm方法是stats包中R标准库的一部分,它与其相关的stats方法update一起工作。

根据update文档,

update将更新并(默认情况下)重新安装模型。它通过提取存储在对象中的调用、更新调用以及(默认情况下)评估该调用来实现这一点。

主要论点:

object,x:来自于模型函数的现有的fit,如lm、andglm和许多其他

因此,如果speedglm存储捕获公式、数据和其他args的调用,并且类似于返回对象结构为glm (从lm类继承),那么update就可以工作。

要解决这个问题,可以考虑通过使用使用update的迭代模型调用动态构建formula来完成lapply的工作。这在这两种方法中都是可行的,因为每个方法都使用formula对象。

代码语言:javascript
复制
library(speedglm) 

check_speedglm <- function(crude, vlist, data, ...){ 
   lapply(seq_along(vlist), function(i)
       speedglm(as.formula(paste(crude, "+", paste(vlist[1:i], collapse=" + "))), 
                data = data, family = binomial()) 
   )
} 

check_speedglm(crude = "vs ~ mpg", vlist = c("am", "hp"), data = mtcars)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58676599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档