【发布时间】: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] & x[2 + 1] & x[2]# [1] FALSE并且因为 TRUE 更改为 FALSE,在反映的后续操作 -
或者对于打印的最后一行,第4个值
x[4-1] & x[4 + 1] & x[4]# [1] FALSE; > x[4] [1] TRUE -
我认为关键在于“当我尝试“运行”我脑海中的代码时,我想出了一行输出”部分。对于大于 1 且小于 5 的每个值,您都会获得一条输出线。换句话说,您会获得 3 条输出线(一条用于 2,一条用于 3,一条用于 4),其中每次更新 x 的一个位置.所以对于 2,只有一个位置被更新。对于 3,2 的位置在之前的 for 循环中被更新,现在第三个位置被更新等等。
标签: r for-loop if-statement boolean boolean-expression