モデルを作成するために使用される式を抽出する必要のある多くのモデルタイプの関数を作成しています。これを行うための柔軟な方法はありますか?例:モデルから式を抽出するR
x <- rnorm(10)
y <- rnorm(10)
z <- rnorm(10)
equation <- z ~ x + y
model <- lm(equation)
私がしなければならないのは、一度モデルに渡された数式オブジェクト「方程式」を抽出することです。
モデルを作成するために使用される式を抽出する必要のある多くのモデルタイプの関数を作成しています。これを行うための柔軟な方法はありますか?例:モデルから式を抽出するR
x <- rnorm(10)
y <- rnorm(10)
z <- rnorm(10)
equation <- z ~ x + y
model <- lm(equation)
私がしなければならないのは、一度モデルに渡された数式オブジェクト「方程式」を抽出することです。
あなたがで欲しいものを得ることができます:
model$call
# lm(formula = formula)
そして、あなたは私が見つけたものを見たい場合は、次に使用:
str(model)
をあなたは「式」の(悪い選択を通過したので、名前を呼ぶ環境)から、あなたが渡したオブジェクトから抽出する必要があるかもしれません:
@JPM acはよりコンパクトな方法を提供しました:formula(model)
。また、formula.lm
関数で使用されるメカニズムを検討する価値があります。 formula
という名前の関数は汎用で、どのようなS3メソッドが定義されているかはmethods(formula)
です。 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.default
と呼んでいると思われるformula(x$terms)
で置き換えられ、その関数の操作を見ると、オブジェクトの環境を調整するように見えます。
lm
オブジェクトを作成した呼び出しがmodel$call
に届きますが、その呼び出しにモデル式としてオブジェクト自体が含まれていると、数式ではなくオブジェクト名が取得されます。
評価されたオブジェクト、つまり数式自体は、model$terms
(どのように扱われたかに関する補助情報の束とともに)でアクセスすることができます。これはlm
への呼び出しの詳細にかかわらず動作するはずです。
お返事ありがとうございます - 実際に式オブジェクト "数式"にアクセスするにはどうすればいいですか?私がinfo < - model $ callを試してみると、info $ formulaがシンボルオブジェクト "formula"を与えてくれます。 – mike
私は 'model $ call [[2]]ではなく' as.list(model $ call)$ formula'を提案します。 – flodel
@mike:あなたが何を求めているのか分かりません。あなたはあなたの数式 "式"と呼ぶことを決めた後、それを名前付き引数として "lm"に渡しました。 'fortunes :: fortune(" dog ")はここにはっきりと当てはまります。 –