10

lm(または最終的に)関数を変更しloessて、ggplot2 geom_smooth(またはstat_smooth)で使用できるようにする必要があります。

たとえば、これはstat_smooth通常の使用方法です。

> qplot(data=diamonds, carat, price, facets=~clarity) + stat_smooth(method='lm')`

のパラメータlm2の値として使用するカスタム関数を定義したいので、その動作をカスタマイズできます。methodstat_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()正直なところ、通話に何を入れるべきかわかりません。

4

1 に答える 1

6

... を関数呼び出しの引数として使用することには、私が完全に理解していない奇妙な点があります (それは ... がリスト型のオブジェクトであることと関係があります)。

これは、関数呼び出しをオブジェクトとして取り、呼び出される関数を lm に設定し、独自の呼び出し元のコンテキストで呼び出しを評価することによって機能するバージョンです。この評価の結果が戻り値です (R では、関数の最後の式の値が返される値なので、明示的な は必要ありませんreturn)。

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_smoothstat_smooth渡します。したがって、追加の引数を設定するだけでよい場合は、独自の関数を作成する必要はありません。

qplot(data=diamonds, carat, price, facets=~clarity) + 
  stat_smooth(method="loess",span=0.5)
于 2010-03-04T02:45:45.280 に答える