【问题标题】:Getting interim results from lapply()从 lapply() 获取中期结果
【发布时间】:2022-06-14 17:06:12
【问题描述】:

我有一些需要很长时间才能计算的 lapply 代码。像这样的:

n <- 10^7
res <- lapply(1:n, function(i){
  print(round(i/n*100, 0))
  rnorm(100)
  })

我们能否在round(i/n*100, 0) 低于 100%(即代码仍在运行)时以某种方式保存中间结果?

我现在正在运行我的实际lapply() 代码,print(round(i/n*100, 0)) 部分告诉我我的计算机快完成了(99%!)。问题是我需要关闭电脑,因为我离开了我的工作地点。在res &lt;- lapply(...) 部分仍在运行时,是否有机会获得 R 迄今为止计算的数据?真不希望他明天再计算那99%的年龄..

【问题讨论】:

  • 使用 for 循环,并在每次迭代时将中间结果写入磁盘。
  • @GregorThomas 这是下一次的想法..
  • 是的,如果您的代码已经在运行,那么更改它为时已晚。
  • 如果您停止执行for 循环,状态将存在于它被中断的位置,但如果您停止执行lapply,任何未返回的结果都将丢失。

标签: r save lapply environment


【解决方案1】:

一旦lapply() 代码运行,似乎就无法捕捉到中间结果。但是有两种选择

  • 按照@GregorThomas 的建议使用for 循环
  • lapply() 函数中使用&lt;&lt;- 可以保存临时结果。

这是问题中代码的第二个选项:

n <- 10^7
res <- vector("list", n)
res <- lapply(1:n, function(i){
  print(round(i/n*100, 0))
  res[[i]] <<- rnorm(100)
})

现在我们可以看一下中间数据是否真的保存了:

head(res)
tail(res)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 2021-12-13
    • 2020-01-30
    • 2014-05-01
    • 2014-11-03
    相关资源
    最近更新 更多