我可能会稍微滥用R,但我希望在脚本启动后执行R命令和特定时间。应该执行命令的时间保存在数据框中。
e.g。
Time <- c(0.5, 5, 13, 30)
Text <- c("Half a second", "5 seconds", "13 seconds", "Half a minute")
df <- data.frame(Time = Time, Text = Text)
df
# Time Text
#1 0.5 Half a second
#2 5.0 5 seconds
#3 13.0 13 seconds
#4 30.0 Half a minute
目标是执行命令,例如。自程序启动以来经过x毫秒(存储在print()
)之后的df$Time_ms
。
我的第一种方法是在命令之间使用Sys.sleep()
。这几乎是可以接受的,但由于每个命令也需要一些时间(print()
不是真的,而是其他更多),它不会超级准确。
我最好的解决方案是使用&#39; while&#39;循环:
# Programm start
start_time <- Sys.time() # Save Program start time.
for(i in 1:nrow(df)){
while(Sys.time() < df$Time[i] + start_time){} # Wait until the System Time is larger than start time plus the time when the command shall be executed.
print(paste(df$Text[i], "has passed.")) # Execute the command.
}
它正在发挥作用。但我对编程没有经验,但我想这不是一个非常优雅的解决方案。你怎么看?有人有更好的&#34;溶液
答案 0 :(得分:0)
我最终使用了来自nicola的提议,并进行了一些小改动。如果程序已运行超过一分钟并且您减去'start_time'当前时间'Sys.time()',结果将以分钟为单位而不是秒。为了防止这种情况,我使用'difftime'。
# Create example data.frame
Time <- c(0.5, 5, 13, 30)
Text <- c("Half a second", "5 seconds", "13 seconds", "Half a minute")
df <- data.frame(Time = Time, Text = Text)
# Programm start
start_time <- Sys.time() # Save Program start time.
for(i in 1:nrow(df)){
wait <- df$Time[i]-(as.numeric(difftime(Sys.time(),start_time, units = "secs"))) # Calculate the waiting time in second.
Sys.sleep(wait)
print(paste(df$Text[i], "has passed.")) # Execute the command.
}