问题
这是因为在您的函数中,您正在处理x
左侧的局部变量和x
右侧的全局变量。您不是x
在函数中更新全局,而是将值分配给101
本地x
。每次调用该函数时,都会发生同样的事情,因此将 local 指定x
为101
5 次,并打印 5 次。
为了帮助可视化:
# this is the "global" scope
x <- 100
f <- function(){
# Get the "global" x which has value 100,
# add 1 to it, and store it in a new variable x.
x <- x + 1
# The new x has a value of 101
print(x)
}
这将类似于以下代码:
y <- 100
f <- function(){
x <- y + 1
print(x)
}
一种可能的解决方法
至于如何修复它。将变量作为参数,并将其作为更新传回。像这样的东西:
f <- function(old.x) {
new.x <- old.x + 1
print(new.x)
return(new.x)
}
您可能希望存储返回值,因此更新后的代码如下所示:
x <- 100
f <- function(old.x) {
new.x <- old.x + 1
print(new.x)
return(new.x)
}
for (i in 1:5) {
x <- f(x)
}