[英]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 的現有擬合,例如
lm
,glm
和許多其他
因此,如果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.