【问题标题】:Sys.time under lapply functionlapply函数下的Sys.time
【发布时间】:2020-09-17 11:37:26
【问题描述】:

我有从特定网页抓取一些数据的 lapply 功能。

lapply(list, function(x) { 
# ...
# some code
# ...
} # end of lapply

where list - 链接向量约 200k。每 600 秒我需要更新页面。为此,我使用跟随构造,但它不能正常工作。在每次 lapply fun 迭代之前,我想检查条件 time - Sys.time() >= 600,如果 TRUE:更新页面和 time变量 ELSE 继续抓取,直到 time - Sys.time() >= 600TRUE。换句话说,我想在 IF 条件下每 600 秒执行一次代码。将不胜感激任何帮助。我想存在更好的解决方案。

assign("time", Sys.time(), envir = .GlobalEnv) 
lapply(list, function(x) { 

if(time - Sys.time() >= 600){  

remDr$refresh() 
assign("time", Sys.time(), envir = .GlobalEnv)
} 

# ...
# some code
# ...
} # end of lapply


【问题讨论】:

  • "但它不能正常工作" 这究竟是什么意思?是否有错误、警告、意外行为……?
  • 第 1 次迭代后的时间差 - Sys.time() 为 2 秒,第 2 次迭代后 - 4 秒,第 3 次后 - 5.2 秒,依此类推,但实际差值高出 10 倍或更多时间
  • 也许可以试试library(compiler); enableJIT(0)

标签: r


【解决方案1】:

你可能想检查库(later),使用later()递归:

library(later)

print_time = function(interval = 10) {
  timestamp()
  later::later(print_time, interval)
}

print_time()

示例取自here

只需将间隔更改为 600 并使用您的函数而不是 timestamp()

【讨论】:

    猜你喜欢
    • 2018-08-22
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    相关资源
    最近更新 更多