R 函数独立运行,在 lapply 内使用时出错

R Function works on its own, error when used within lapply

我需要对数据框中的所有变量执行单变量逻辑回归。我有166个变量,我一直在尝试使用lapply来简化这个过程。但是,我不断收到错误消息:

> lapply(data$Gates, FUN=Lmodel)

Error in model.frame.default(formula = Sstatus ~ x, data = data,
na.action = na.exclude,  : 
variable lengths differ (found for 'x') 

我这样构建函数 Lmodel:

Lmodel<-function(x){
(glm(Sstatus~x, data=data, family="binomial"))
}

该函数在不与 lapply 一起使用时有效:

> Lmodel(data$Gates)

Call:  glm(formula = Sstatus ~ x, family = "binomial", data = data, 
na.action = na.exclude)

Coefficients:
(Intercept)           xy  
 2.5986      -0.6527  

Degrees of Freedom: 169 Total (i.e. Null);  168 Residual
(8 observations deleted due to missingness)
Null Deviance:      96.72 
Residual Deviance: 95.57    AIC: 99.57

我的因变量 Sstatus 确实包含一些缺失值,我想这就是我的问题所在。但是,我不明白为什么该函数单独运行,但与 lapply 一起使用时却不行。我该如何解决这个问题?

如果您想使用 lapply,您必须创建一个列表,其中列表的元素是包含自变量观察值的向量。例如,您有一个包含变量 Sstatus、indepen1、indepen2、indepent3 的数据集。

# make a list
list.of.indepent <- vector("list", 3)
list.of.indepent[[1]] <- indepen1
etc 

然后

lapply(list.of.indepent, FUN=Lmodel) 

应该可以。

您可能需要按如下方式编辑 Lmodel 函数

Lmodel<-function(x){
(glm(data$Sstatus~x, family="binomial"))
}