ggplot2のgeom_smooth以内にそれを使用するために、LMや黄土機能を変更します
質問
私はggplot2のlm
(またはloess
)でそれを使用できるようにgeom_smooth
(または最終的にstat_smooth
)機能を変更する必要があります。
たとえば、これはstat_smooth
が通常使用される方法である。
> qplot(data=diamonds, carat, price, facets=~clarity) + stat_smooth(method='lm')`
私はその動作をカスタマイズすることができますので、lm2
にmethod
パラメータの値として使用するカスタムstat_smooth
関数を定義したいと思います。
> lm2 <- function(formula, data, ...)
{
print(head(data))
return(lm(formula, data, ...))
}
> qplot(data=diamonds, carat, price, facets=~clarity) + stat_smooth(method='lm2')
私はmethod='lm2'
のパラメータとしてstat_smooth
を使用していることに注意してください。
私はこのコードを実行するとエラーが表示されます。
私は非常によく理解していないはevalでのエラー(exprの、ENVIR、enclos): 'nthcdrはは'
ダウンCDRにリストを必要とします
。 lm2
の外側を実行したときにstat_smooth
方法は非常によく動作します。私はこのビットを演奏し、私は、エラーの種類を持っているが、私はRのデバッグツールで快適おりませんので、私はそれらをデバッグすることは困難です。正直なところ、私はreturn()
コールの内側に置くべきか得ることはありません。
解決
私は完全に(それが...リスト型のオブジェクトであることとは何かを持っている)理解していないことを使用して...関数呼び出しの引数としていくつかのすごみがあります。
ここに私たち自身の呼び出し元のコンテキストで呼び出しをLMに呼び出される関数を設定し、オブジェクトとして関数呼び出しを取った後、評価することによって動作したバージョンです。この評価の結果は、我々の戻り値(私たちは、明示的なreturn
を必要としないので、Rでの関数の最後の式の値が値が返される)である。
foo <- function(formula,data,...){
print(head(data))
x<-match.call()
x[[1]]<-quote(lm)
eval.parent(x)
}
あなたはLM呼び出しに引数を追加したい場合は、あなたがこのようにそれを行うことができます:
x$na.action <- 'na.exclude'
あなたはLMを呼び出す前に、FOOに引数をドロップしたい場合、あなたはこのようにそれを行うことができます。
x$useless <- NULL
あなたが唯一のいくつかの余分な引数を設定する必要がある場合は、独自の関数を作成する必要はありませんので、ところで、geom_smooth
とstat_smooth
は、スムージング機能に余分な引数を渡します
qplot(data=diamonds, carat, price, facets=~clarity) +
stat_smooth(method="loess",span=0.5)