gpt4 book ai didi

r - R 函数的 for 循环

转载 作者:行者123 更新时间:2023-12-04 05:24:51 26 4
gpt4 key购买 nike

我是 R 的新手(和一般编程),并且对为什么以下代码位产生不同的结果感到困惑:

x <- 100

for(i in 1:5){
x <- x + 1
print(x)
}

如我所料,这会逐步打印序列 101:105。
x <- 100

f <- function(){
x <- x + 1
print(x)
}

for(i in 1:5){
f()
}

但这只是五次打印 101 。

为什么将逻辑打包成函数会导致它在每次迭代时恢复到原始值而不是递增?我该怎么做才能使这项工作成为一个重复调用的函数?

最佳答案

问题

这是因为在你的函数中你正在处理一个局部变量 x在左侧,和一个全局变量 x在右侧。您没有更新全局 x在函数中,但分配了 101 的值到本地x .每次调用该函数时,都会发生同样的事情,因此您分配本地 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)
}

关于r - R 函数的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16625377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com