【问题标题】:making sense of a for loop with an if statement in R用 R 中的 if 语句理解 for 循环
【发布时间】:2020-05-25 03:59:53
【问题描述】:

这是一个准备考试的练习题。我们得到了这个代码:

x=c(T,T,F,T,F)

for (i in 1:5){
  if(i > 1 & i < 5){
     x[i ] = x[i-1] & x[i+1] & x[i]

     print(x)
  }
}

并要求预测输出。输出是:

[1]  TRUE FALSE FALSE  TRUE FALSE
[1]  TRUE FALSE FALSE  TRUE FALSE
[1]  TRUE FALSE FALSE FALSE FALSE

我这辈子都无法理解这一点。有人可以解释一下输出背后的逻辑吗?我在其他上下文中使用过 for 循环和 if...else 语句,但真/假真的让我失望。我假设有三行输出,因为 if 语句中有 3 个 i 值。当我尝试在脑海中“运行”代码时,我想出了一行输出,“TRUE、FALSE、FALSE、FALSE、FALSE”,因为 i=1 和 i=5 将保持不变,而 i=2 ,3,4 是错误的,因为 x[i-1]&x[i+1]&x[i] 在布尔逻辑下给出错误的答案。

【问题讨论】:

  • 它正在更新每个循环中“x”的位置,即当 i 为 2 时。x[2] 为 TRUE,但如果您检查 x[2-1] &amp; x[2 + 1] &amp; x[2]# [1] FALSE 并且因为 TRUE 更改为 FALSE,在反映的后续操作
  • 或者对于打印的最后一行,第4个值x[4-1] &amp; x[4 + 1] &amp; x[4]# [1] FALSE; &gt; x[4] [1] TRUE
  • 我认为关键在于“当我尝试“运行”我脑海中的代码时,我想出了一行输出”部分。对于大于 1 且小于 5 的每个值,您都会获得一条输出线。换句话说,您会获得 3 条输出线(一条用于 2,一条用于 3,一条用于 4),其中每次更新 x 的一个位置.所以对于 2,只有一个位置被更新。对于 3,2 的位置在之前的 for 循环中被更新,现在第三个位置被更新等等。

标签: r for-loop if-statement boolean boolean-expression


【解决方案1】:

当 i 为 1 或 5 时,循环根本不提供任何输出。当 i 为 2 时,x 中的第二位被替换为位置 1 到 3 的“与”值(这是错误的),然后以当前形式输出 x。

对于 i 等于 3 和 4 相同,(在每轮结束时打印 x)唯一可见的结果是将第 4 位的 T 变成 F。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 2021-03-06
    • 2016-06-16
    • 2019-06-09
    相关资源
    最近更新 更多