从d_ply中访问分组变量

mit*_*hus 3 r plyr

我刚刚发现了这个伟大的plyr包装并且正在接受它.

我有一个问题如下:是否有一些方法可以从内部访问分组变量d_ply?

说我有一个数据帧df的柱子x,y,z,我想画出每个z值x对y.如果我执行以下操作:

plotxy = function(df, ...) {plot(df$x, df$y, ...)}
d_ply(df, .(z), plotxy(df, main=.(z)))
Run Code Online (Sandbox Code Playgroud)

然后显示在图上的标题都是"z",而不是z变量的值.有没有办法从内部访问这些值d_ply?

编辑:正如@Justin指出的那样,上面的表述是错误的,因为我正在将整个过程传递df给plotxy.因此这条线

d_ply(df, .(z), plotxy(df, main=.(z)))
Run Code Online (Sandbox Code Playgroud)

应该

d_ply(df, .(z), plotxy, main=.(z))
Run Code Online (Sandbox Code Playgroud)

为了理解我原来的问题(我猜这也是@joran所暗示的).

但是,我意识到了别的.即使df沿着被剪切z的d_ply,子非数据帧,该函数接收仍然有z柱-简单地总是相同的值.因此,问题显然可以解决如下:

plotxy = function(df, ...) {plot(df$x, df$y, main=df$z[1])}
d_ply(df, .(z), plotxy)
Run Code Online (Sandbox Code Playgroud)

Jus*_*tin 5

举例来说,我将扩展Joran的关注点.

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

让我们使用你的函数,看看我们得到什么没有plyr:

plotxy(df, main=.(z))
Run Code Online (Sandbox Code Playgroud)

可能更期望(?):

plotxy(df, main=df$z)
Run Code Online (Sandbox Code Playgroud)

但是,在代码中,您将在z上拆分数据框,然后再将整个data.frame df发送到您的函数.相反,你可以创建一个包装函数:

d_ply(df, .(z), function(ply.df) plotxy(ply.df, main=unique(ply.df$z)))
Run Code Online (Sandbox Code Playgroud)

这样,该plotxy函数只能看到通过包装函数传递的较小的split data.frame ply.df.