2

xの関数をプロットしたいと思います。ここで、xはベクトルに適用されます。とにかく、簡単な例をあげるのが最も簡単です:

var <- c(1,2,3)
curve(mean(var)+x)
curve(mean(var+x))

最初のものは機能しますが、2番目のものはエラーを出します:'expr'は長さ'n'のオブジェクトに評価されませんでしたそしてvar+ x:長いオブジェクト長は短いオブジェクト長の倍数ではありません

基本的に私はそのような関数の最小値を見つけたいです:例えば

optimize(function(x) mean(var+x), interval=c(0,1))

そして、結果を視覚化することができます。最適化関数は機能しますが、curve()を機能させる方法がわかりません。ありがとうございます。

4

2 に答える 2

3

関数はベクトル化する必要があります。つまり、ベクトルを評価する場合は、同じ長さのベクトルを返す必要があります。結果に任意のベクトルを渡すとmean、常に長さ1のベクトルになります。したがって、平均はベクトル化されません。あなたが使用することができますVectorize

f <- Vectorize(function(x) mean(var+x))
curve(f,from=0, to=10)
于 2012-08-30T15:19:32.880 に答える
2

これは、一般的なケースで次を使用して実行できますsapply

curve(sapply(x, function(e) mean(var + e)))

あなたが与える特定の例mean(var) + xでは、もちろん、あなたが探しているものと算術的に同等です。使用しているより複雑な関数についても、同様のショートカットが存在する可能性があります。

于 2012-08-30T15:17:22.940 に答える