运行 多次使用for循环的模型,重命名并将其附加到列表中
Run a model multiple times with a for loop, rename it and append it to a list
我试图在循环中多次 运行 一个模型,然后 select 选择其中最好的一个。为此我想
- 用行
assign(paste0("mod_match_logit", i), mod)
和 更改每个模型的名称
- 然后将每个模型添加到包含行
list.append(lis, eval(paste0("mod_match_logit", i)))
的列表中
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
...
我试图在循环中多次 运行 一个模型,然后 select 选择其中最好的一个。为此我想
- 用行
assign(paste0("mod_match_logit", i), mod)
和 更改每个模型的名称
- 然后将每个模型添加到包含行
list.append(lis, eval(paste0("mod_match_logit", i)))
的列表中
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
...