如何在循环中为Sys.sleep设置两个机制

时间:2015-05-20 16:02:40

标签: r

我想要2套Sys.sleep。一个长的,每次迭代都很短。当前示例执行第一次“长时间睡眠”,但不进行下一次“长时间睡眠”。

以下是示例:

out <- as.numeric()

for(i in 1:20){
 out[i] <- i*5
  if(i==seq(5,20,5)){
   Sys.sleep(5); print("Long sleep")
  } else {
    for(j in 1:5){
     Sys.sleep(0.15); cat(j)
 }}}

out

循环应该具有“长睡眠”,每次第5次迭代时为5秒,每次迭代时为0.15秒。

我在这里做错了什么?感谢。

1 个答案:

答案 0 :(得分:5)

错误the condition has length > 1 and only the first element will be used应该表明您的if测试不正确。我们在控制台上试试吧:

i <- 5
i == seq(5,20,5)
## [1]  TRUE FALSE FALSE FALSE

当你在if语句中执行此操作时,它期望比较中只有一个逻辑,因此它被混淆了。 (你会用哪个?)

也许你的意思是i %in% seq(5,20,5)?更好的是,我建议您预先指定序列并与之进行比较,否则每次都会创建一个静态向量。

myseq <- seq(5,20,5)
for(i in 1:20) {
    out[i] <- i*5
    if(i %in% myseq) {
        Sys.sleep(5); print("Long sleep")
    } else {
        for(j in 1:5) {
            Sys.sleep(0.15); cat(j)
        }
    }
}

作为替代方案,您还可以检查(i %% 5 == 0),这可能会更快,具体取决于测试序列的大小。