R 通过将表达式传递给“更新回归对象”;“子集”;
我有许多由R 通过将表达式传递给“更新回归对象”;“子集”;,r,expression,substitution,R,Expression,Substitution,我有许多由lm()创建的回归对象。每一个都是根据不同的数据构建的 帧,这些不同的数据帧具有不同的维度。但每个数据帧都包含逻辑变量x、y和z。在某些情况下,我希望更新每个回归对象,以便子集参数为x。在其他情况下,我希望更新每个回归对象,以便子集参数为y。在其他情况下,我想更新每个回归对象,使子集参数为z。做这件事的有效方法是什么 这是一种低效的方式: # Set only one of these three variables to be TRUE subsetX <- TRUE subs
lm()
创建的回归对象。每一个都是根据不同的数据构建的
帧,这些不同的数据帧具有不同的维度。但每个数据帧都包含逻辑变量x
、y
和z
。在某些情况下,我希望更新每个回归对象,以便子集
参数为x
。在其他情况下,我希望更新每个回归对象,以便子集
参数为y
。在其他情况下,我想更新每个回归对象,使子集
参数为z
。做这件事的有效方法是什么
这是一种低效的方式:
# Set only one of these three variables to be TRUE
subsetX <- TRUE
subsetY <- FALSE
subsetZ <- FALSE
# Now update the regressions.
if (subsetX) {
update(lm1, subset = x)
update(lm2, subset = x)
[...]
} else if (subsetY) {
update(lm1, subset = y)
update(lm2, subset = y)
[...]
} else if (subsetZ) {
update(lm1, subset = z)
update(lm2, subset = z)
[...]
}
#仅将这三个变量中的一个设置为TRUE
subsetX这里有一种方法,通过一个简单的函数,并使用purr::map2
为其提供所需的模型和子集列表,使您的工作流程变得更简单
库(purrr)
设定种子(2020年)
mtcars$x(拦截)马力
#> 31.21178 -0.08098
#>
#>
#> [[2]]
#>
#>电话:
#>lm(公式=mpg~hp,数据=mtcars,子集=y)
#>
#>系数:
#>(拦截)马力
#> 32.83501 -0.07294
#>
#>
#> [[3]]
#>
#>电话:
#>lm(公式=mpg~hp,数据=mtcars,子集=z)
#>
#>系数:
#>(拦截)马力
#> 32.53554 -0.08688
#>
#>
#> [[4]]
#>空的
subsetVar <- dplyr::case_when(
subsetX ~ expression(x),
subsetY ~ expression(y),
subsetZ ~ expression(z))
update(lm1, subset = substitute(subsetVar))
update(lm2, subset = substitute(subsetVar))
[...]