运行代码片段
D=1;for (j in 1:5){D=(D-1)%%4;print(D)}
我得到了预期的结果:
[1] 0
[1] 3
[1] 2
[1] 1
[1] 0
但是当我将结果加 1
D=1;for (j in 1:5){D=((D-1)%%4)+1;print(D)}
时,它会变成:
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
为什么会出现这种情况?
这就是我所期望的:
D=1;for (j in 1:5){D=(D-1)%%4;print(D+1)}
[1] 1
[1] 4
[1] 3
[1] 2
[1] 1
您将
D
初始化为 1。当 j
为 0 及更高版本时,您可以计算
D=((D-1)%%4)+1
因此,当
D
为 1 时,则上述公式将得出 1,与 j 的值无关,因为 D
仅取决于其自身先前的值,并且每当它为 1 时,公式将得出 1,因此 D
将从不改变。相反,尝试这个公式:
D=(D%%4)+1
D
为 0,则结果将为 1D
为 1,则结果将为 2D
为 2,则结果将为 3D
为 3,则结果将为 4D
为 4,则结果将为 1既然你想要
[1] 1
[1] 4
[1] 3
[1] 2
[1] 1
您需要将
D
初始化为 0,因此第一个结果将为 1:
D=0;for (j in 1:5){D=(D%%4)+1;print(D)}
它每次都会返回 1,因为你正在做的是: D = 1
在你的循环中:
j = 1 :
D = ((D - 1) %% 4 ) + 1
D = ((1 - 1) %% 4 ) + 1
等于 0 %% 4 + 1 = 1
因此,在执行结束时,您将获得与开始时相同的 D 值,并且您会执行其他 4 次。
所以你的 D 值不会改变。
(英语不是我的母语,但如果您需要更多详细信息,我很乐意为您提供更多信息)