2

この質問の前に、私は R についてほとんど知らないと言っておきましょう。read.table("file.txt", T) を使用してテキスト ファイルを R にインポートしています。テキスト ファイルの一般的な形式は次のとおりです。

header1    header2
a          1
a          4
b          3
b          2

各 a はサンプルからの観測値であり、同様に各 b は異なるサンプルからの観測値です。tapply(header2, header1, mean) で行っている a と b のセットのさまざまな統計を計算したいと思います。それはうまくいきます。

ここで、a と b の qqnorm プロットを実行し、qqline で描画する必要があります。tapply(header2, header1, qqnorm) を使用して各分位プロットを作成できますが、tapply(header2, header1, qqline) を使用すると、最後の分位プロットに両方の最適な線が描画されます。プログラム的には理にかなっていますが、私には役に立ちません。

私の質問は、データ フレームを 2 つのベクトル (すべての a 用に 1 つとすべての b 用に 1 つ) に変換するにはどうすればよいかということです。それは理にかなっていますか?基本的に、上記の例では、a=(1,4) と b=(3,2) の 2 つのベクトルになりたいと考えています。

ありがとう!

4

1 に答える 1

4

両方を行う関数を作成します。(少なくとも簡単に) 古いグラフィックス デバイスに戻すことはできません。

例えば

with(dd, tapply(header2,header1,  function(x) {qqnorm(x); qqline(x)}))

data.tableコーディングの優雅さ(および速度)のためにここを使用できます

bodydata.table のスコープ内で評価される関数の a に相当するものを渡すことができます。

library(data.table)
DT <- data.table(dd)
DT[, {qqnorm(x)
      qqline(x)}, by=header1]

多くのオブジェクトでグローバル環境を汚染したくはありません (非効率的です)。

于 2013-03-15T05:15:27.880 に答える