[英]Extract formula from model in R
我正在为许多模型类型构建一个函数,需要提取用于制作模型的公式。 有灵活的方法吗? 例如:
x <- rnorm(10)
y <- rnorm(10)
z <- rnorm(10)
equation <- z ~ x + y
model <- lm(equation)
我需要做的是在传递模型后提取公式对象“方程式”。
你可以得到你想要的东西:
model$call
# lm(formula = formula)
如果你想看看我发现了什么然后使用:
str(model)
由于您从调用环境传递了'formula'(顺便选择名称),因此您可能需要从传递的对象中提取:
eval(model$call[[2]])
# z ~ x + y
@JPMac提供了一种更紧凑的方法: formula(model)
。 还值得研究formula.lm
函数使用的机制。 名为formula
的函数是通用的,您可以使用methods(formula)
来查看已定义的S3方法。 由于formula.lm
方法的末尾有一个星号,你需要将它包装在`getAnywhere:
> getAnywhere(formula.lm)
A single object matching ‘formula.lm’ was found
It was found in the following places
registered S3 method for formula from namespace stats
namespace:stats
with value
function (x, ...)
{
form <- x$formula
if (!is.null(form)) {
form <- formula(x$terms)
environment(form) <- environment(x$formula)
form
}
else formula(x$terms)
}
<bytecode: 0x36ff26158>
<environment: namespace:stats>
所以它使用“$”来提取名为“formula”的列表项,而不是从调用中提取它。 如果缺少$ formula项(它在你的情况下)然后它用formula(x$terms)
替换它,我怀疑它是调用formula.default
并且查看该函数的操作似乎只是调整环境对象。
如上所述, model$call
将为您创建创建lm
对象的调用,但如果该调用包含对象本身作为模型公式,则获取对象名称,而不是公式。
可以在model$terms
访问评估对象(即公式本身)(以及关于如何处理它的一堆辅助信息)。 无论调用lm
的细节如何,这都应该有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.