4

私はちょうど素晴らしいplyrパッケージを発見し、それを試してみました。

私が持っている質問は次のとおりです:内部からグループ化変数にアクセスする方法はありますd_plyか?

df列のあるデータフレームがあり、値ごとx,y,zにプロットしたいとします。私が次のことをした場合:zxy

plotxy = function(df, ...) {plot(df$x, df$y, ...)}
d_ply(df, .(z), plotxy(df, main=.(z)))

その場合、プロットに表示されるタイトルはすべて「z」であり、z変数の値ではありません。内部からこれらの値にアクセスする方法はありますd_plyか?

編集:@Justinが指摘したように、私は全体をに渡しているので、上記の定式化は間違っていdfますplotxy。したがって、ライン

d_ply(df, .(z), plotxy(df, main=.(z)))

する必要があります

d_ply(df, .(z), plotxy, main=.(z))

私の元の質問の観点から意味をなすために(@joranがほのめかしていたことでもあると思います)。

しかし、私は別のことに気づきました。dfによってスライスzされてもd_ply、関数が受け取るサブデータフレームには、z常に同じ値の列があります。したがって、問題は明らかに次のように解決できます。

plotxy = function(df, ...) {plot(df$x, df$y, main=df$z[1])}
d_ply(df, .(z), plotxy)
4

1 に答える 1

6

例として、Joranの懸念について詳しく説明します。

df <- data.frame(x=rnorm(100), y=rnorm(100), z=letters[1:10])

関数を使用して、plyrなしで何が得られるかを見てみましょう。

plotxy(df, main=.(z))

対多分もっと期待される(?):

plotxy(df, main=df$z)

ただし、コードでは、データフレームをzで分割してから、 data.framedf全体を関数に再度送信します。代わりに、ラッパー関数を作成できます。

d_ply(df, .(z), function(ply.df) plotxy(ply.df, main=unique(ply.df$z)))

このように、plotxy関数はラッパー関数を通過する小さいsplitdata.frameply.dfのみを認識します。

于 2012-05-14T16:29:26.953 に答える