2016-10-10 5 views
0

私は何年もRを使ってきたので、一種の新生児質問に申し訳ありませんが、学生が私にそれを指摘するまでこの行動に気付かなかった私はそれを説明することはできません。まず、小さなデータフレームを構築します。 100を超えるx値は違法であると思われますが、ここではいくつかの問題があります。また、「グループ」を独立変数:今R奇妙なデータフレームのサブセットの公式対ノーの公式

x = c(20, 30, 50, 60, 150, 35, 55, 75, 45, 145) 
g = c(1,1,1,1,1,2,2,2,2,2) 
df = data.frame(cbind(x,g)) 

を持って、箱ひげ図、両方のグループ化や、不正な値を含むすべてのデータを示しており、グループ化されていない、彼らが必要として:

boxplot(x~g) 
boxplot(x) 

boxplot(x~g, data=df[x < 100,]) 

しかし、グループ化されていない1はしていません:だから、我々はxの値を持つフレームで行のみを選択することで、不正な値を削除する100未満グループ化されたバージョンが期待どおりに動作します! 100を超える値を含むすべてのデータがプロットされます。以前の作品とこれはなぜ違いますか?

boxplot(x, data=df[x < 100,]) 

私は、単純な何かが欠けてると確信しているが、私の人生のために私はそれが何であるかを把握することはできません、と私はグーグル経由で答えを見つけるか、ここで検索することができませんでした。

答えて

0

理由は、boxplotが地球環境からのデータフレームではなく、xであるためです。これは同様に動作しないこと

注:

df1 = df[x < 100, ] 
boxplot(x, data=df1) 

しかし、この作品:

boxplot(df[df$x < 100, 'x']) 
+1

正確ではありません。上記の私のコメントを参照してください。 – joran

2

boxplotは完全に、最初の引数が何であるかに依存することを意味し、一般的なS3です異なる機能が実際に呼び出されています。 boxplot.formulaの引数はboxplot.defaultとは異なります。具体的には、boxplot.defaultにはデータ引数はまったくありません。それはおそらく...に吸い込まれており、未知のグラフィカルパラメータとして無視されます。

代わりにboxplot(x[x < 100])を試してください。

+0

もちろん!うん、私はそれを得る。初めに機能のアイデアを頭に浮かべている初心者に説明するのは難しいが、少なくとも今は知っている。 (ちなみに、あなたのアプローチは私が学生に与えた解決策ですが、なぜそれがそのように機能したのか分かりませんでした。) –