首页 > 解决方案 > 先前计算的行是否会影响 R 循环中的连续行?

问题描述

我有这个代码

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)
  } 
  else if(i < 5){
     x[i] = !x[i] | !x[i+1]
  }
}

我试图弄清楚它给我的输出

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

我想知道第一个值x[2](即x[2] = T & F & T)是否会影响下一行的输出,x[3]或者每行的这些计算是否相互独立?

标签: rloops

解决方案


是的,您的代码x在 for 循环中发生了变化:

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

for (i in 1:5){
  cat(paste0("\nLoop iteration Nr. ", i, " 'x' is: ", paste0(x, collapse=", ")))
  if(i > 1 & i < 5){
    cat(paste0("\nAbout to set x[", i, "] to ", x[i - 1] & x[i + 1] & x[i]))
    x[i] = x[i - 1] & x[i + 1] & x[i]

  } else if(i < 5){
    cat(paste0("\nAbout to set x[", i, "] to ", !x[i] | !x[i+1]))
    x[i] = !x[i] | !x[i+1]
  }
}

Loop iteration Nr. 1 'x' is: TRUE, TRUE, FALSE, TRUE, FALSE
About to set x[1] to FALSE
Loop iteration Nr. 2 'x' is: FALSE, TRUE, FALSE, TRUE, FALSE
About to set x[2] to FALSE
Loop iteration Nr. 3 'x' is: FALSE, FALSE, FALSE, TRUE, FALSE
About to set x[3] to FALSE
Loop iteration Nr. 4 'x' is: FALSE, FALSE, FALSE, TRUE, FALSE
About to set x[4] to FALSE
Loop iteration Nr. 5 'x' is: FALSE, FALSE, FALSE, FALSE, FALSE

并且由于您在每次迭代中使用前一个值来计算当前值,因此第 i 步会影响第 i+1 步。


推荐阅读