3

私は R に不慣れで、存在しないか、他の言語では必要のないデータ構造にしばしば混乱します。

現在、「言語」タイプのオブジェクトを「式」に変換してプロットできるようにしようとしています。

まず、プロットする関数を作成します。

> model <- nls(y~a+b*exp(x*z),start = list(a=1, b = -.5, z = -.8),data=results)  
> modelsym <- substitute(a+b*exp(z*x), list(a=coef(model[1],b=coef(model)[2],z=coef(model)[3]))

関数のタイプは「言語」です。

> modelsym  
0.958945264470923 + -0.463676594301167 * exp(-0.155697065390677 * x)  
> typeof(modelsym)  
[1] "language"

この曲線をプロットしようとすると:

> curve(modelsym)  
Error in eval(expr, envir, enclos) : could not find function "modelsym"

ただし、コピーして貼り付けると正常に動作します。

> curve(0.958945264470923 + -0.463676594301167 * exp(-0.155697065390677 * x))  
**[plot appears here]**

私はas(modelsym,expression)無駄にしようとしました。

プロットするためにオブジェクトmodelsymをに変換するにはどうすればよいですか?expression

4

2 に答える 2

3

別の攻撃計画は、predict を使用することです。

model <- nls(y~a+b*exp(x*z),start = list(a=1, b = -.5, z = -.8),data=results)

modelf <- function(x) predict(model, newdata = data.frame(x = x))
plot(modelf)
curve(modelf)
于 2013-04-01T12:40:48.817 に答える
3

これは完全な解決策ではありませんが、私は次のことに近づきました:

do.call(curve, list(expr = modelsym))

これは基本的に、 のコンテンツに設定された引数を使用して の呼び出しを手配しcurveます。exprmodelsym

あなたがしようとしていることが失敗する理由は、の最初の行curve

sexpr <- substitute(expr)

ステートメントを含むオブジェクト(実際には任意のオブジェクト)を渡すと、これが得られます。結果は次のようになります。

Browse[2]> sexpr
modelsym
Browse[2]> is.call(sexpr)
[1] FALSE
Browse[2]> is.expression(sexpr)
[1] FALSE

これらの 2 つのテストはcurve、入力が受け入れられるかどうかを確認するために使用されるものです。

渡すものは何でもcurve、実際のステートメントである必要があり、それを含む呼び出しではありません。

于 2013-03-31T19:40:45.347 に答える