コードにはかなりの問題がありますが、主な問題は、列名を文字列として渡すことです。
関数内のパラメーターで「検索と置換」を実行するだけで、次のようになります。
res <- ddply(diamonds, .("color", "cut"), mean("price"))
どのように機能するかを理解している場合ddply
(コードの残りの部分を考えると、これは疑わしいです)、これは機能しないはずです:最後の部分(関数)のエラーを無視すると、これは(不足に注意してください)引用符の:。()表記は、引用符を提供するplyrの方法にすぎません):
res <- ddply(diamonds, .(color, cut), mean(price))
幸いなことに、ddply
2番目の引数を文字のベクトル、つまり列の名前として渡すこともサポートしているため、(最後のパラメーターの問題をもう一度無視すると)次のようになります。
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
、次のことを行う必要があります。
foo <- function(data, facs, bar) {
res <- ddply(data, facs, function(dfr, colnm){mean(dfr[,colnm])}, bar)
res
}
foo(diamonds, c("color", "cut"), "price")