重新初始化R中的变量并让它们全局更新

时间:2012-06-21 16:51:21

标签: r variable-assignment

我不确定如何用正确的术语提出这个问题,相关的问题并不是一回事。我想绘制一个函数,并注意到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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)) )