2011-07-05 10 views
4

私はその中でddplyを使って関数を作成しようとしています。しかし、私は働くことができません。これは私が得るものを再現するダミーの例です。これには何かがありますかthis bug関数内でddplyを使う

library(ggplot2) 
data(diamonds) 

foo <- function(data, fac1, fac2, bar) { 
    res <- ddply(data, .(fac1, fac2), mean(bar)) 
    res 
} 

foo(diamonds, "color", "cut", "price") 

答えて

10

これはバグではありません。 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

+0

最後の文は重要なヒントです。私はしばらくの間、 'as.name'などで回り込んでいました。 –

+0

@joran - いくつかの変数の要約統計を見ることができるように、ベクトルをvarに渡す簡単な方法はありますか? –

+0

@dchandlerあなたが何を意味するのか分かりません。 'var'とは何ですか? – joran

10

コードにはかなりの問題がありますが、主な問題は、列名を文字列として渡していることです。

ちょうどやって「見つけると置換」関数の利回り以内にあなたのパラメータを持つ:

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をとり、現在の値がcolorcutのdata.frame(diamonds)を渡した部分を保持する関数でなければなりません。 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") 
+0

私のコードで何が間違っているかを見ています。しかし、私には難しいことはありません。ありがとう! –

+0

@lselzer:私はそうではありませんでした。私は確かにあなたが「愚かな間違い」か何かをしたとは思わない。このかなり普及していないエラーは、引用符で囲まれていない列名を(たとえば式を定義するときなどに)渡すことができるように、Rがよく見えるという事実に由来します。それがうまくいくと素晴らしいですが、多くの人々を誤った信念に誘います。 –

+0

問題はありませんが、名前のないfucntionメソッドは集計では機能しません。別の質問をしたり、この質問を更新する必要がありますか?私がリンクしているバグが(少なくともplyr 1.5.1では)まだ解決されていないので、おそらくdata.frameを溶かします... –

関連する問題