1

この質問を正しい用語でどのように提起するかはわかりませんが、関連する質問は同じものではありませんでした。関数をプロットしたかったのですが、Rが係数の変更でプロットを更新していないことに気付きました。

a <- 2
x <- seq(-1, 1, by=0.1)
y <- 1/(1+exp(-a*x))
plot(x,y)

a <- 4
plot(x,y) # no change

y <- 1/(1+exp(-a*x)) # redefine function
plot(x,y) # now it updates

自分が何をしているのかわからない場合に備えて、このRの基本的なプロットチュートリアルの構文に従いました。唯一の違いは、の割り当てに=代わりにを使用することでした。結果は同じでした。<-y = 1/(1+exp(-a*x))

私は実際にRで関数をプロットしたことがないので、これを経験したのはこれが初めてでした。再定義された変数が初期値で初期化された関数またはオブジェクトに伝播されない場合、他の領域で悪い結果が見られたのではないかと思います。

1)何か間違ったことをしていて、変数を動的に割り当てて、関数が現在の値と作成時の値を考慮に入れる方法はありますか?

2)そうでない場合、変数の割り当てを微調整し、他のすべてが適切に更新されていることを確認するときに、Rプログラマーがこれを回避する一般的な方法はありますか?

4

2 に答える 2

2

実際、あなたは関数をプロットしていません。代わりに、2つのベクトルをプロットしています。次のプロットを呼び出す前にベクトルの値を更新していないため、2つの同一のプロットが得られます。

curve()関数を直接プロットするには、次の関数を使用する必要があります。

f <- function(x, a)1/(1+exp(-a*x))

プロット:

curve(f(x, 1), -1, 1, 100)

ここに画像の説明を入力してください

curve(f(x, 4), -1, 1, 100)

ここに画像の説明を入力してください

于 2012-06-21T16:59:03.047 に答える
1

Rは、Excel、MathCAD、またはオブジェクトの値を変更すると、過去にその値を使用した可能性のある他のベクトルが更新される可能性があると思われるその他のアプリケーションではありません。あなたがこれをしたとき

a <- 4
plot(x,y) # no change

'x'または'y'に変更はありませんでした。

これを試して:

curve( 1/(1+exp(-a*x))  )
a <- 10
curve( 1/(1+exp(-a*x)) )
于 2012-06-21T16:56:10.227 に答える