我试图在R中创建一个函数,它返回函数调用1后的前x秒,下x秒0,下x秒1再次。整个过程应在另一个时间间隔后或n次迭代后停止。我想用一个函数调用来做到这一点。如何在R中创建一个定时器功能
我读了关于包tcltk,它显然需要创建这样的“计时器”功能的一些可能性,但我没有找到足够的解释来解决我的问题。
你能否告诉我在哪里可以找到一个很好的手册来解释与R语境中的tcl?你有没有其他想法如何以有效的方式创建这样一个功能?
非常感谢您的帮助。
我试图在R中创建一个函数,它返回函数调用1后的前x秒,下x秒0,下x秒1再次。整个过程应在另一个时间间隔后或n次迭代后停止。我想用一个函数调用来做到这一点。如何在R中创建一个定时器功能
我读了关于包tcltk,它显然需要创建这样的“计时器”功能的一些可能性,但我没有找到足够的解释来解决我的问题。
你能否告诉我在哪里可以找到一个很好的手册来解释与R语境中的tcl?你有没有其他想法如何以有效的方式创建这样一个功能?
非常感谢您的帮助。
如果我理解你正确,你正在试图创建时,它被称为第一个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)
}
}
可以使用该创建过程中交替每隔10秒0和1之间的函数第60秒,并返回-1 60秒后:
> flp <- flipper(10,60)
现在呼吁flp()
将有你要找的行为,即当你在接下来的60秒称之为flp()
,它将在1和0之间交替每10秒秒,那么在60秒后它将返回-1。
Sys.sleep
从基地不能解决?
如:停止在一个循环中每10个迭代10秒:
for (i in 1:100) {
# do something
if ((i %% 10) == 0) {
Sys.sleep(10)
}
}
timefun <- function(interval = 10, output = c(0, 1)) {
start <- Sys.time()
# do some stuff
for (i in 1:99999) paste(i, i^2)
# how many intervals did it take
elapsed <- as.numeric(round(Sys.time() - start))/interval
output[elapsed %% length(output) + 1]
}
我不清楚的“整个过程应该陆续时间间隔或经过n次迭代停止”,做你想要的功能执行过程中要定期检查经过的时间和stop()
如果它超过一定值?
之后的tcltk命令将在一段时间后调用一个函数。让它重复调用可以按照以下方法完成(由于这种愿望在事件之间有不同的间隔而变得更加复杂)。
afterID <- ""
someFlag <- TRUE
MS <- 5000 # milliseconds
repeatCall <- function(ms=MS, f) {
afterID <<- tcl("after", ms, function() {
if(someFlag) {
f()
afterID <<- repeatCall(MS - ms, f)
} else {
tcl("after", "cancel", afterID)
}
})
}
repeatCall(MS, function() {
print("Running. Set someFlag <- FALSE to stop.")
})
我还建议:
定时器1
library(data.table)
begin.time <- Sys.time()
timetaken(begin.time)
定时器2
library(matlab)
tic(gcFirst=FALSE)
toc(echo=TRUE)
两者都是计时器极好的选择
你想`T0 < - Sys系统.time`,否则你会在全局scop中修改`t0` e(如果它已经存在) – hadley 2011-01-31 17:56:00