我想要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秒。
我在这里做错了什么?感谢。
答案 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)
,这可能会更快,具体取决于测试序列的大小。