【问题标题】:Reinitializing variables in R and having them update globally重新初始化 R 中的变量并让它们全局更新
【发布时间】:2012-06-21 16:51:21
【问题描述】:

我不确定如何用正确的术语提出这个问题,并且相关问题不是同一件事。我想绘制一个函数,但注意到 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 上的语法。唯一的区别是使用= 而不是&lt;- 来分配y = 1/(1+exp(-a*x))。结果是一样的。

我实际上从来没有用 R 绘制过一个函数,所以这是我第一次遇到这种情况。这让我想知道如果重新定义的变量没有传播到使用初始值初始化的函数或对象,我是否在其他领域看到了不好的结果。

1) 我做错了什么吗?有一种方法可以动态分配变量,以便函数考虑当前值与创建时的值?

2) 如果没有,R 程序员在调整变量分配并确保其他所有内容都正确更新时,是否有一种通用的方法来解决这个问题?

【问题讨论】:

    标签: r variable-assignment


    【解决方案1】:

    事实上,你并不是在绘制一个函数。相反,您正在绘制两个向量。由于您在调用下一个图之前尚未更新向量的值,因此您会得到两个相同的图。

    要直接绘制函数,需要使用curve()函数:

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

    剧情:

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

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

    【讨论】:

    • 谢谢。您的答案和 DWin 都说同样的话,但您解释得更好。我查看了curve() 并认为我现在明白了......并且觉得问这个很愚蠢。
    【解决方案2】:

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

    【讨论】:

    • 是的,这是我的问题...我查看了y 并意识到它只是一个基于x 所创建的向量。现在,绘制 xy 只是基于两个向量创建一个简单的绘图并使用创建它时的 y 是有道理的。
    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    相关资源
    最近更新 更多