Se podía conseguir lo que quería por:
model$call
# lm(formula = formula)
Y si usted quiere ver lo que he encontrado a cabo a continuación, utilizar:
str(model)
Desde que ha pasado 'fórmula' (mala elección de nombres por cierto) del entorno de llamada que puede necesitar extraer del objeto que pasó:
eval(model$call[[2]])
# z ~ x + y
@JPM ac ofreció un método más compacto: formula(model)
. También vale la pena mirar el mecanismo utilizado por la función formula.lm
. La función llamada formula
es genérica y usa methods(formula)
para ver qué métodos S3 se han definido. Dado que el método formula.lm
tiene un asterisco en su extremo, es necesario que lo envuelve en `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>
Por lo tanto, está utilizando "$" para extraer el elemento de la lista denominada "fórmula" en lugar de tirar desde la llamada . Si falta el artículo $ formula (que es en su caso), entonces lo reemplaza con formula(x$terms)
, que sospecho que está llamando al formula.default
y al observar el funcionamiento de esa función parece que solo se está ajustando el entorno del objeto.
Gracias por responder, ¿cómo puedo acceder realmente a la "fórmula" del objeto de fórmula? Si intento info <- model $ call, info $ formula solo me da un objeto de símbolo "formula". – mike
Sugiero 'as.list (modelo $ call) $ formula' en lugar de' modelo $ call [[2]] '. – flodel
@mike: No estoy seguro de lo que estás preguntando. Usted es el que decidió llamar a su fórmula, "fórmula", y luego pasó eso como un argumento con nombre a 'lm'. 'fortunes :: fortuna (" perro ")' definitivamente se aplica aquí. –