2010-11-29 4 views
2

散布図を作成し、データセットのサブセットの回帰直線を描画したいとします。再現可能な例を与えるために、私はCO2データセットを使用します。"with"内に "plot"の後に "abline"が機能しない

私はこれを試してみましたが、回帰直線が

with(subset(CO2,Type=="Quebec"),plot(conc,uptake),abline(lm(uptake~conc))) 

何らかの理由で表示されません。このようなコマンドを与えるための正しい方法は何ですか? 1ライナーでもできますか?

答えて

9

両方のコード行を1つのR式として指定する必要があります。 abline()は、with()(これは...引数)の後続の引数として使用されています。これは、将来のメソッドに引数を渡す手段として文書化されていますが、最終的な結果は、コードのこの部分の事実上ブラックホールです。

つのオプション、i)1種のラインを保つが、{}に式をラップし、;で2つの式を区切る:

with(subset(CO2,Type=="Quebec"), {plot(conc,uptake); abline(lm(uptake~conc))}) 

または静止{}に包まれた二行、上式を広げ:

with(subset(CO2,Type=="Quebec"), 
    {plot(conc,uptake) 
     abline(lm(uptake~conc))}) 

編集:正直言って、このようなことをしているならば、Rのモデル式を使ってサブセッティングをすることの利点が失われています。次のように私はこれをやっているだろう:

plot(uptake ~ conc, data = CO2, subset = Type == "Quebec") 
abline(lm(uptake ~ conc, data = CO2, subset = Type == "Quebec"), col = "red") 

with()はちょうどあなたがブレースと;を使用して、コードを難読化する原因となっています。

+0

あなたの "編集"には素晴らしい提案があります。それははるか正しい方法です。 –

+0

私はいくつかの制限のセットを複数回与えたくないということです。それは危険かもしれません。 – Brani

3

?withwith ... dataを使用して作成されたローカル環境でexprと評価されます。 abline()...で渡しています。

with(subset(CO2,Type=="Quebec"),{plot(conc,uptake);abline(lm(uptake~conc))}) 
2

GavinとJoshuaはすぐに問題を解決する優れたソリューションを提供します。ここにはggplotを使った等価なプロットがあります:

関連する問題