如何在R中最好地创建定时器功能

Eva*_*Eva 5 algorithm r tcl timer

我正在尝试在R中创建一个函数,它返回函数调用1之后的前x秒,下一个x秒0,再次下一个x秒1,...整个过程应该在另一个时间间隔后或之后停止n次迭代.我想用一个函数调用来做这个.

我读到了包tcltk,这显然需要一些创建这种"计时器"功能的可能性,但是我找不到足够的解释来解决我的问题.

你能告诉我在哪里可以找到一个好的手册,用R解释tcl吗?您是否有其他想法如何以有效的方式创建这样的功能?

非常感谢你的帮助.

Pra*_*ani 9

如果我理解正确的话,你试图创建一个函数,无论何时在前x秒调用它都会返回1,然后在下一个x秒调用时返回0,然后在接下来的x秒内返回1,等等.经过一段total时间后,它应该"完成",也许返回-1?

您可以使用以下函数执行此操作,该函数将"创建"具有任何所需间隔的函数:

flipper <- function(interval=10, total = 60) {
  t0 <- Sys.time()
  function() {
    seconds <- round(as.double( difftime(Sys.time(), t0, u = 'secs')))
    if(seconds > total)
      return(-1) else
    return(trunc( 1 + (seconds / interval ) ) %% 2)
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用此功能创建一个在前60秒内每10秒交替0到1之间的功能,并在60秒后返回-1:

> flp <- flipper(10,60)
Run Code Online (Sandbox Code Playgroud)

现在呼叫flp()将具有您正在寻找的行为,即当您flp()在接下来的60秒内呼叫时,它将每10秒在1和0之间交替,然后在60秒后它将返回-1.


dar*_*zig 7

Sys.sleep 从基地不能解决?

例如:在循环中每隔10次迭代停止10秒:

for (i in 1:100) {
    # do something
    if ((i %% 10) == 0) {
        Sys.sleep(10)
    }
}
Run Code Online (Sandbox Code Playgroud)


Tyl*_*ker 5

我还可以建议:

计时器1

library(data.table)

begin.time <- proc.time()
timetaken(begin.time)
Run Code Online (Sandbox Code Playgroud)

计时器2

library(matlab)

tic(gcFirst=FALSE)
toc(echo=TRUE)
Run Code Online (Sandbox Code Playgroud)

两者都是计时器的绝佳选择