r - 如何在 R 中创建迭代 lm() 公式

标签 r function loops regression subset

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

我怎样才能制作lm() com.names 中每一列的公式与 +在超过 1 个名字的名字之间签名?

例如,在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) # ???

最佳答案

你已经很接近了。让我们使用您的 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"

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

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 ~ ", s)), data = mtcars)
# Coefficients:
# (Intercept)         gear  
#       5.623        3.923  
# [[2]]
# Call:
# lm(formula = as.formula(paste("mpg ~ ", s)), data = mtcars)
# Coefficients:
# (Intercept)          cyl  
#      37.885       -2.876  

关于r - 如何在 R 中创建迭代 lm() 公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58761009/

相关文章:

从 print() 控制台输出重新创建向量

linux - 前置符号链接(symbolic link)文件名

c - 我怎样才能使 C 可以将字母与单词分开

matlab - 请求的函数输出参数

r - 如何在 R 中编写 SAS 宏?

r - 合并 R 中的两个图。第二个情节正在取代第一个

R - 从排序数据构建新变量

JavaScript - 是否有更有效的方法来创建选项元素?

javascript - 在React循环中向JSX元素添加 key 的不同方法

bash - 如何在 bash 文件循环后使用增量命名输出文件?