【问题标题】:What is the principle behind the code of getting "for loop" output获取“for循环”输出的代码背后的原理是什么
【发布时间】:2022-01-03 09:59:02
【问题描述】:

我很困惑代码运行for循环返回结果的原理,即x=c(x,i)

> x<-c()
  for(i in 1:5){
     x=c(x,i)
  }
>  x
 [1] 1 2 3 4 5

根据我对for循环的理解,我认为x=i会返回预期的结果,在这种情况下它会是1 2 3 4 5,但返回的是5,只显示最后一轮循环的结果,我想知道为什么 x=c(x,i) 可以收集每一轮循环的结果? x, x in () 和 i 之间的关系是什么?比如他们之间的价值分配过程是怎样的? 希望有人能解释一下。非常感谢!!!

> x<-c()
  for(i in 1:5){
     x=i
  }
>  x
 [1] 5

【问题讨论】:

  • 使用&lt;- 进行赋值使事情更清楚:x &lt;- c(x, i) 表明c(x, i) 的值被放入x

标签: r for-loop


【解决方案1】:

x=c(x,i) 正在收集数据,因为函数 c 将每个新值 i 连接到先前存在的向量 x

如果您想更深入地了解循环内部发生了什么,可以使用print(x),它将在循环的每次迭代中显示x 的值。

x<-c()
for(i in 1:5){
  x=c(x,i)
  print(x)
}

# [1] 1
# [1] 1 2
# [1] 1 2 3
# [1] 1 2 3 4
# [1] 1 2 3 4 5

在每次迭代中,x 都会更新为新值 i。如果没有c,则x的先前值将从向量x中删除,如下所示。

x<-c()
for(i in 1:5){
  x=i
  print(x)
}
# [1] 1
# [1] 2
# [1] 3
# [1] 4
# [1] 5

正如@user2554330 在 cmets 中指出的那样,使用&lt;- 而不是= 更容易考虑,因为c(x,i) 被存储到一个新的向量x 中。因此,x 在每次迭代中都会被覆盖,这就是为什么使用 x = i 会得到不同结果的原因。

【讨论】:

  • 您好,非常感谢您的回答,我从中得到了更多的理解。
  • 嗨!我很高兴;如果您对答案感到满意,您可以点击勾选接受它。
  • 但是,根据我对过程的理解,这是一个显示变量 (x) 存储一个包含变量本身 (x) 和另一个元素 (i) 的向量的表达式,这对我来说很棘手就像:对于第一次交互,i=1,所以 x
  • 但是在这种情况下,元素“x”从topper环境中获取了变量“x”的值后,存储在变量“x”中的向量应该变为x
  • 变量 x 在每次迭代中都会被覆盖,这意味着 for 循环会在每次迭代中将 x 替换为 c(x, i)。对于第一次迭代,它将c() 替换为c(x,i),即1。所以在迭代 1 结束时,x=1。然后第二次迭代,x 被c(x,2) 替换为x=1,所以现在x = 1,2 等等。如果没有c 函数,x 的值将只是i
猜你喜欢
  • 2014-10-17
  • 2021-04-07
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多