我开始工作了.2353908这是一个复制我得到的虚拟例子 . 这有什么事吗this bug?
library(ggplot2) data(diamonds) foo <- function(data, fac1, fac2, bar) { res <- ddply(data, .(fac1, fac2), mean(bar)) res } foo(diamonds, "color", "cut", "price")
我不相信这是一个错误 . ddply 需要一个函数的名称,你没有真正提供 mean(bar) . 你需要编写一个完整的函数来计算你想要的平均值:
ddply
mean(bar)
foo <- function(data, fac1, fac2, bar) { res <- ddply(data, c(fac1, fac2), function(x,ind){ mean(x[,ind]},bar) res }
此外,您不应该将字符串传递给 .() ,因此我将其更改为 c() ,以便您可以将函数参数直接传递给 ddply .
.()
c()
您的代码存在很多问题,但主要问题是:您将列名称作为字符串传递 .
只需在函数内对参数进行“查找和替换”即可:
res <- ddply(diamonds, .("color", "cut"), mean("price"))
如果你理解 ddply 是如何工作的(我有点怀疑这个,给定其余的代码),你会明白这不应该工作:忽略最后一部分(函数)中的错误,这应该是(注意到缺乏引号: . ()表示法只不过是plyr提供引号的方式:
res <- ddply(diamonds, .(color, cut), mean(price))
幸运的是, ddply 还支持将其第二个参数作为字符向量传递,即列的名称,因此(再次忽略最后一个参数的问题),这应该变为:
foo <- function(data, facs, bar) { res <- ddply(data, facs, mean(bar)) res } foo(diamonds, c("color", "cut"), "price")
最后:传递给 ddply 的函数应该是一个函数,它将第一个参数作为data.frame,每次都会保存你传递给data.frame(菱形)的部分,以获取 color 和 cut 的当前值 . mean("price") 或 mean(price) 都不是 . 如果你坚持使用 ddply ,这就是你需要做的:
color
cut
mean("price")
mean(price)
foo <- function(data, facs, bar) { res <- ddply(data, facs, function(dfr, colnm){mean(dfr[,colnm])}, bar) res } foo(diamonds, c("color", "cut"), "price")
2 回答
我不相信这是一个错误 .
ddply
需要一个函数的名称,你没有真正提供mean(bar)
. 你需要编写一个完整的函数来计算你想要的平均值:此外,您不应该将字符串传递给
.()
,因此我将其更改为c()
,以便您可以将函数参数直接传递给ddply
.您的代码存在很多问题,但主要问题是:您将列名称作为字符串传递 .
只需在函数内对参数进行“查找和替换”即可:
如果你理解
ddply
是如何工作的(我有点怀疑这个,给定其余的代码),你会明白这不应该工作:忽略最后一部分(函数)中的错误,这应该是(注意到缺乏引号: . ()表示法只不过是plyr提供引号的方式:幸运的是,
ddply
还支持将其第二个参数作为字符向量传递,即列的名称,因此(再次忽略最后一个参数的问题),这应该变为:最后:传递给
ddply
的函数应该是一个函数,它将第一个参数作为data.frame,每次都会保存你传递给data.frame(菱形)的部分,以获取color
和cut
的当前值 .mean("price")
或mean(price)
都不是 . 如果你坚持使用ddply
,这就是你需要做的: