1

昨日この質問への回答を投稿して以来、これは私を悩ませてきました。

次のデータを検討してください。

carpaint <- data.frame(paint = c(rep(c("blue", "black", "red"), 
                                     times=3)),
                       car1 = c(100, 138, 123, 143, 112, 
                                144, 343, 112, 334), 
                       car2 = c(111, 238, 323, 541, 328, 
                                363, 411, 238, 313), 
                       car3 = c(432, 123, 322, 342, 323, 
                                522, 334, 311, 452))

色で箱ひげ図を生成したい場合(「車」による二次グループ化を無視)、bwplotからの数式表記を簡単に使用できますlattice

library(lattice)
bwplot(car1 + car2 + car3 ~ paint, data=carpaint)

ラティス出力

ただし、boxplotfromを使用して同様のプロットを取得するgraphicsには、数式の表記が異なるため、最初にデータを長い形式に変換してから、次のようにプロットする必要があります。

carpaint.l = reshape(carpaint, direction="long", varying=2:4, sep="")
boxplot(car ~ paint, data=carpaint.l)

グラフィック出力

質問:最初にデータを再形成せずに、できれば数式表記を使用して、boxplotから同じプロットを取得する方法はありますか?graphics(これは、リンクされた質問のOPが望んでいた出力のタイプではない可能性があるという事実を無視しています-彼らはまだ私の答えや@RomanLuštrikによる質問にコメントしていません。私はただ私を満足させようとしています好奇心を持ち、数式表記をよりよく理解することを学びます。)

:代替案を提供することは間違いなく歓迎されますが、いくつかの選択肢が機能している理由と機能していない理由を理解するのに役立つことを願っています。たとえば、なぜ機能するのにboxplot(as.matrix(carpaint[, 2:4]) ~ carpaint$paint)機能boxplot(carpaint[, 2:4] ~ carpaint$paint)しないのか。boxplotのドキュメントには、必要ではないように見えても、プロットする前に行列をデータフレームに変換する例があるため、奇妙だと思います。

4

1 に答える 1

2

carpaint[, 2:4]cbind(car1, car2, car3)はリストですが、とは両方ともas.matrix(carpaint[, 2:4])基礎となる原子ベクトル表現を持っています。箱ひげ図のヘルプページには、「y」引数は数値ベクトルである必要があると記載されています。boxplot.formula使用splitboxplot(split(mf[[response]], mf[-response]), ...)grp引数は、長さを応答ベクトルに一致させるために再利用されますsplitsplitlist/data.frame形式の3つのベクトルではそれを行うことができません。

于 2012-07-17T13:50:20.603 に答える