运行 多次使用for循环的模型,重命名并将其附加到列表中

Run a model multiple times with a for loop, rename it and append it to a list

我试图在循环中多次 运行 一个模型,然后 select 选择其中最好的一个。为此我想

  1. 用行 assign(paste0("mod_match_logit", i), mod)
  2. 更改每个模型的名称
  3. 然后将每个模型添加到包含行 list.append(lis, eval(paste0("mod_match_logit", i)))
  4. 的列表中

library(MatchIt)
library(rlist)

lis = list()
for (i in 1:12){
  mod = matchit(f.build("var_1", df_cov), method = "nearest", distance = "logit", data = df_no_na, caliper = caliper_val, ratio = 2)
  assign(paste0("mod_match_logit", i), mod)
  list.append(lis, eval(paste0("mod_match_logit", i)))
  print(i)
}
lis

但是这个命令没有输出

注意:我可以多次使用 运行 逻辑回归而不是匹配算法(即将行 mod = matchit(f.build("var_1", df_cov), method = "nearest", distance = "logit", data = df_no_na, caliper = caliper_val, ratio = 2) 替换为 mod = glm(f.build("var_1", df_cov), data = df_no_na)。但是在 [=16 的情况下=]它在统计上并不有趣,因为它每次都会生成相同的模型,而使用 Matchit 创建的模型每次都有点不同。

考虑 lapply,类似于 for 作为一个循环,但是 returns 是一个列表对象,其长度等于其输入 1:12。无需初始化空列表然后填充,使用 assign 保存单独的命名对象,或尝试使用 eval(paste0(...)):

动态引用对象
lis <- lapply(1:12, function(i)
              matchit(f.build("var_1", df_cov), method = "nearest", distance = "logit", 
                      data = df_no_na, caliper = caliper_val, ratio = 2)
       )

甚至相应地添加名称:

names(lis) <- paste0("mod_match_logit", 1:12)

lis$mod_match_logit1
lis$mod_match_logit2
lis$mod_match_logit3
...