2012-06-21 49 views
1

我不知道如何用正確的語言來提出這個問題,並且相關的問題不是相同的問題。我想繪製一個函數,並注意到R沒有隨着我的係數變化而改變劇情。在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 

以防萬一,我不知道我在做什麼,我也跟着上this R basic plotting tutorial的語法。唯一的區別是使用=而不是<-來分配y = 1/(1+exp(-a*x))。結果是一樣的。

我其實從來沒有用R畫過一個函數,所以這是我第一次經歷這個。這讓我懷疑,如果重新定義的變量沒有傳播到函數或用初始值初始化的對象,我是否在其他領域看到了不好的結果。

1)我做錯了什麼,並且有一種方法可以讓動態分配的變量排序,以便函數考慮當前值與創建時的值?

2)如果不是,R程序員在調整變量賦值並確保其他所有內容已正確更新時都有一個共同的方法嗎?

回答

2

你是不是,事實上,在繪製函數。相反,你正在繪製兩個向量。由於您在調用下一個繪圖之前未更新矢量的值,因此會得到兩個相同的繪圖。

要直接繪製功能,你需要使用curve()功能:

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

簡介:

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

enter image description here

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

enter image description here

+0

謝謝。你的答案和迪文都說同樣的事情,但你更好地解釋了事情。我看着'curve()',想我現在明白了......並且爲此而感到無聊。 – Hendy

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))) 
+0

是的,這是我的問題......我看着'y',意識到它只是一個基於'x'創建的向量。現在有意義的是,繪製'x'和'y'只需創建一個基於兩個向量的簡單繪圖,並使用它創建時的任何'y'。 – Hendy