我有一个公式列表,我使用lapply并lm创建一个回归模型列表.但是,当我查看call每个线性模型的组件,而不是看到显式公式时,我会看到我解析为线性模型的变量的名称.例如,使用mtcars数据集:
temp_formula_list = list(as.formula(hp~1),as.formula(hp~cyl))
temp_fm_list = lapply(temp_formula_list, function(x) lm(data = mtcars, formula = x))
Run Code Online (Sandbox Code Playgroud)
然后检查call的temp_fm_list[[2]]:
temp_fm_list[[2]]$call
Run Code Online (Sandbox Code Playgroud)
给
lm(formula = x, data = mtcars)
Run Code Online (Sandbox Code Playgroud)
当我希望它明确给予
lm(formula = hp~cyl, data = mtcars)
Run Code Online (Sandbox Code Playgroud)
mne*_*nel 10
您可以使用语言进行一些简单的计算bquote来构建您的呼叫.
temp_fm_list = lapply(temp_formula_list, function(x) {
lmc <- bquote( lm(data = mtcars, formula = .(x)))
eval(lmc)
})
temp_fm_list
# Call:
# lm(formula = hp ~ 1, data = mtcars)
#
# Coefficients:
# (Intercept)
# 146.7
#
#
# [[2]]
#
# Call:
# lm(formula = hp ~ cyl, data = mtcars)
#
# Coefficients:
# (Intercept) cyl
# -51.05 31.96
Run Code Online (Sandbox Code Playgroud)
注意
function(x) do.call('lm', list(formula = x, data = quote(mtcars))
Run Code Online (Sandbox Code Playgroud)
也会有用
即使使用原始调用,您也可以从terms与模型关联的对象重新创建公式
例如
x <- hp ~ cyl
lmo <- lm(formula = x, data = mtcars)
formula(lmo)
## hp ~ cyl
lmo$call
# lm(formula = x, data = mtcars)
Run Code Online (Sandbox Code Playgroud)
call如果你愿意,你可以搞乱这个对象(虽然这是相当危险的做法)
# for example
lmo$call$formula <- x
lmo$call
## lm(formula = hp ~ cyl, data = mtcars)
## however you can create rubbish here too
lmo$call$formula <- 'complete garbage'
lmo$call
## lm(formula = "complete garbage", data = mtcars)
# but, being careful, you could use it appropriately
temp_fm_list = lapply(temp_formula_list, function(x) {
oo <- lm(data = mtcars, formula = x)
oo$call$formula <-x
oo
})
temp_fm_list
# Call:
# lm(formula = hp ~ 1, data = mtcars)
#
# Coefficients:
# (Intercept)
# 146.7
#
#
# [[2]]
#
# Call:
# lm(formula = hp ~ cyl, data = mtcars)
#
# Coefficients:
# (Intercept) cyl
# -51.05 31.96
Run Code Online (Sandbox Code Playgroud)