6

lm()引数、、、、formulaおよびをdata使用して実行しています。私の体重は数値変数に保存されています。na.actionweights

  • 数式を文字(つまりformula = "Response~0+.")として指定すると、重みが適切な長さではないというエラーが発生します(適切な長さであっても)。
  • 引用符なしで数式を指定すると(つまりformula = Response~0+.)、関数は正常に機能します。

私はドキュメントでこの文に出くわしましたlm()

すべての重み、サブセット、およびオフセットは、数式の変数と同じ方法で評価されます。つまり、最初にデータで、次に数式の環境で評価されます。

これは私には解釈が難しいですが、私の質問に対する答えが含まれていると感じています。

4

2 に答える 2

7

式を意図した引数を作成すると、パーサーはそれを「試行」します。引数がRの意味での言語呼び出しであると「期待」します。引用符で区切られた文字列である必要はありません。そのため、paste(.) を使用して式の引数を作成し、文字列またはより正確には "文字オブジェクト" を as.formula() の引数として配置して仕上げる人々を見かけます。返されるものには、「式」のクラスと「呼び出し」のモードが与えられています。

> class( as.formula("Y ~ x") )
[1] "formula"
> mode( as.formula("Y ~ x") )
[1] "call"s
> class( "Y ~ x")
[1] "character"
> mode( "Y ~ x")
[1] "character"
于 2011-07-29T20:06:35.597 に答える
6

(これはあなたが抱えている実際の問題とは何の関係もありません.[@DWinはあなたのQのコメンテーターと同様にそれに対処しました]が、あなたが引用したドキュメントの一部の説明によるものです)

引用されたヘルプ情報は、モデル式で変数/オブジェクト参照を検索するために使用されるのと同じプロセスが、引数 weights、subset などに提供される変数/オブジェクトを検索するために使用されることを意味します。

R は、数式で参照されているオブジェクトを、引数 weights、subset、および offset によって、最初にデータ オブジェクトで、次に数式の環境 (通常、対話型使用中のグローバル環境) で探します。

ドキュメントでこれが明示的に言及されている理由はlm()、モデル式インターフェイスを使用する多くの R 関数と同様に、いわゆる標準非標準評価を使用するためです。要するに、1 が を提供すると、R は引数を評価する際にweights = foo必ずしも object を探すとは限りません。代わりに、引数に指定されたオブジェクトfooで名前を持つオブジェクトを探します。そこで見つからない場合は、モデル式に関連付けられた環境で、前述のように、必ずしもそうである必要はありません。地球環境。foodata

于 2011-07-29T20:46:06.937 に答える