簡體   English   中英

function 中的 lapply、glm 和 speedglm:缺少參數“data”,沒有默認值

[英]lapply, glm, and speedglm inside a function: argument “data” is missing, with no default

我正在使用mtcars數據來顯示我的問題。 以下代碼適用於glm 它通過將vlist中的每個變量添加到glm(vs ~ mpg, family = binomial(), data = mtcars的 model 來生成新模型。

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)

但是,當我用speedglm替換glm時,

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(formula = vs ~ mpg + am, data = data, drop.unused.levels = TRUE) 中的錯誤:缺少參數“data”,沒有默認值。

我認為問題出在lapply行,但我無法找到解決方案。 任何解決此問題的建議將不勝感激。

本質上,您正在混淆可能彼此不兼容的 package 方法。 盡管它們具有相同的名稱,但這兩種方法都來自不同的包,因此不同的作者用於不同的目的和 output 不同的對象( glm class 與speedglm ZA2F2ED4F8EBC2CBB4C21A29DC44AB61DZ 可能是 S3 對象)。

具體來說, glm方法是 R 的標准庫的一部分,在stats package 中,它與相關的stats方法update一起使用。

每個update文檔,

update將更新並(默認情況下)重新安裝 model。 它通過提取存儲在 object 中的調用、更新調用並(默認情況下)評估該調用來做到這一點。

主要論點:

object, x : model function 的現有擬合,例如lmglm和許多其他

因此,如果speedglm存儲對捕獲公式、數據和其他參數的調用,並將返回的 object 結構類似於glm (它繼承自lm類),則update將起作用。


要解決此問題,請考慮通過使用lapply使用迭代 model 調用動態構建formula來執行update 這兩種方法都適用,因為每種方法都使用formula object。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM