如何在R中制作迭代lm()公式

我有一个名为var.names的4个名字的向量。使用combn(),我获得了存储在com.names中的这4个名称的所有唯一组合(例如,每个单独,2、3和所有4个的唯一组合)。

如何在lm()的每一列中制作com.names公式,并且在多个名称之间添加+符号?

例如,在com.names[[1]][,1]中,我们只有一个名字("gear"),因此我的公式将为mpg ~ gear。但是,在com.names[[2]][,1]中,我们有两个名称("gear" "cyl"),所以我的公式将是mpg ~ gear + cyl,依此类推(总的来说,我们将有15个公式)。

ThisThis的答案可能会有帮助?

var.names <- c("gear","cyl","drat","disp") # from BASE R 'mtcars' dataset

com.names <- lapply(seq_along(var.names),function(i)combn(var.names,i)) # all combinations

# My incomplete attempt:
 lapply(com.names,function(x,d) lm(as.formula("mpg ~ ")   )),data = mtcars) # ???
tzyyhjb 回答:如何在R中制作迭代lm()公式

您已经关闭。让我们以您的com.names进行更新以创建组合字符串:

# thanks to thelatemail for use of 'combn(...,FUN=)'
com.names <- lapply(seq_along(var.names),function(i) combn(var.names,i,FUN = paste,collapse = " + "))
com.names
# [[1]]
# [1] "gear + cyl + drat + disp"
# [[2]]
# [1] "gear + gear + gear + cyl + cyl + drat"  "cyl + drat + disp + drat + disp + disp"
# [[3]]
# [1] "gear + gear + gear + cyl"  "cyl + cyl + drat + drat"   "drat + disp + disp + disp"
# [[4]]
# [1] "gear" "cyl"  "drat" "disp"

现在我们可以直接将其转换为公式(formulæ?):

head(lapply(unlist(com.names),function(s) as.formula(paste("mpg ~ ",s))),n=3)
# [[1]]
# mpg ~ gear
# <environment: 0x0000000053e86950>
# [[2]]
# mpg ~ cyl
# <environment: 0x0000000031730970>
# [[3]]
# mpg ~ drat
# <environment: 0x0000000032c38d58>

从那里开始,它只是在lm中使用它:

head(lapply(unlist(com.names),function(s) lm(as.formula(paste("mpg ~ ",s)),data=mtcars)),n=2)
# [[1]]
# Call:
# lm(formula = as.formula(paste("mpg ~ ",data = mtcars)
# Coefficients:
# (Intercept)         gear  
#       5.623        3.923  
# [[2]]
# Call:
# lm(formula = as.formula(paste("mpg ~ ",data = mtcars)
# Coefficients:
# (Intercept)          cyl  
#      37.885       -2.876  
本文链接:https://www.f2er.com/3140067.html

大家都在问