我试图在for循环中跳过一些迭代:
Lines <- "
time Temperature
1 38.3
2 38.5
3 38.9
4 40.1
5 38.0
6 38.6
7 37.9
8 38.2
9 37.5
10 38.0"
DF <- read.table(text = Lines, header = TRUE)
for (i in unique(DF$time)){
ix=which(i==DF$time)
if(DF$Temperature[ix] > 38.65) ix=ix+3
print(ix)
}
但我没有得到所需的输出。它不会跳过迭代。相反,它只是覆盖它,以便我得到一些迭代两次。
输出:
[1] 1
[1] 2
[1] 6
[1] 7
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
期望的输出:
[1] 1
[1] 2
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
更新
i=1
while(i<=DF$time){
if(DF$Temperature[i] > 38.65){
print(i)
i=i+3}
i=i+1
}
这就是我的尝试。但显然它错了。从未使用过。有人能帮助我吗?
答案 0 :(得分:2)
我认为你在R中混淆了for
与while
条款。这基本上就是你要做的事情:
ix <- 1
while(ix <= 10) {
if (DF$Temperature[ix] > 38.65) {
ix = ix + 3
print(ix)
} else{
print(ix)
}
ix = ix + 1
}
使用@ jogo的更正编辑
答案 1 :(得分:0)
根据您的输入,只有第3和第4个索引具有DF $ Temperature&gt; 38.65比较给出结果,休息是假的。
R比较38.6&gt; 38.65将给出等于false的结果。
所以,
DF$Temperature > 38.65
[1] FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
所以你的输出是根据这里的逻辑,第3和第4个索引增加3。
[1] 1
[1] 2
[1] 6 # index3 +3
[1] 7 # index 4 +3
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10