【问题标题】:Simple way of showing progress in data.table "by" loops在 data.table “by”循环中显示进度的简单方法
【发布时间】:2016-02-22 11:10:30
【问题描述】:

我的计算机速度很慢,我的一些 R 计算需要数小时甚至数天才能运行。我确信它们可以提高效率,但与此同时,我想找到一种简单的方法来显示 R 在进行所需计算方面有多远。

loop 中,print(i) 可以轻松完成此操作。在进行data.table 计算时是否可以使用类似的东西?

例如,以下代码在我的机器上运行大约需要 50 个小时

q[, ties := sum(orig[pnum == origpat, inventors] %in% ref[pnum == ref.pat, inventors]), by = idx]

q 是一个 data.table 列,origpatref.patidx(索引)作为列。数据表origref 都包含pnuminventors 列。该代码仅查找两组中重叠发明人的数量,但考虑到迭代性质 (by = idx),它需要很长时间。 我希望我的屏幕发布进度,例如每 1,000 行(大约有 20 个 mio 行)。

有什么方法可以简单地做到这一点?

【问题讨论】:

  • 你能给出一个最小的可重现问题的例子吗?也许有人也可以建议一种更有效/更快的方法来做到这一点
  • 感谢您的评论,您可以在此链接中找到一个示例:stackoverflow.com/questions/35310315/… 前段时间我发布了一个与此问题非常相似的问题,data.table 中的解决方案是有人提出的最好的与。
  • 请编辑您的问题,使其成为独立资源,不依赖于其他问题/链接。
  • 试试ies := {print(.GRP); sum(orig[pnum == origpat, inventors] %in% ref[pnum == ref.pat, inventors])} 这类似于print(i)
  • @Frank,太棒了,这正是我想要的。谢谢大家!

标签: r data.table


【解决方案1】:

试试

q[, ies := {
  print(.GRP)
  sum(orig[pnum == origpat, inventors] %in% ref[pnum == ref.pat, inventors])
}, by=idx] 

这类似于 print(i) 的按组操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 2020-03-24
    • 2018-02-19
    • 2012-10-20
    • 2019-04-17
    相关资源
    最近更新 更多