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 指出的那样,上述表述是错误的,因为我将整个dfto传递给plotxy. 因此这条线

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

应该

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

为了使我原来的问题有意义(我想这也是@joran 所暗示的)。

然而,我意识到了另一件事。即使被df切片,函数接收的子数据帧仍然有一列——只是总是具有相同的值。因此,问题显然可以解决如下:zd_plyz

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.frame df再次发送到您的函数。相反,您可以创建一个包装函数:

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

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

于 2012-05-14T16:29:26.953 回答