1

当需要了解我的德雷克计划时,vis_drake_graph()它会派上用场,它会显示每个目标运行所需的时间。这对于确定是否应该分解目标以减少小更改的重新运行时间非常有帮助。

我的需求是相关的:因为我的许多长期运行的目标都涉及对大型数据集的操作,所以了解每个缓存目标在磁盘上的大小对我来说很重要。这将帮助我了解是否应该组合目标以防止存储大量中间结果(即使在更改组合目标的情况下会增加重新运行时间)。

检查 config 对象和返回的中间对象drake_graph_info(),我无法找到此信息。vis_drake_graph()我在想通过指定参数或什至仅通过手动检查配置对象来显示此信息以及可能显示的其他信息(例如上次运行目标的时间)可能非常有用。

那么问题来了,有没有办法获取这些信息?

4

2 回答 2

2

drake使用一个调用storr来处理目标存储的包。据我所知,storr没有简单的方法来获取文件大小信息。但是,至少对于默认storr_rds()缓存类型,也许应该。您可以将其作为一项功能来请求。如果实施,我们将有以下解决方法的更简单版本,至少在 RDS 缓存的情况下。

library(drake)
load_mtcars_example()
make(my_plan, verbose = 0L)
cache <- get_cache() # or storr::storr_rds(".drake")
root <- cache$driver$path
hash <- cache$driver$get_hash("small", namespace = "objects")
path <- file.path(root, "data", paste0(hash, ".rds"))
file.exists(path)
#> [1] TRUE
file.size(path)
#> [1] 404

reprex 包(v0.2.1)于 2019 年 5 月 7 日创建

drake都是关于重复和运行时间的,而且storr都是关于数据和存储的。当我们考虑新功能时,我更愿意将这些单独的目标牢记在心。

于 2019-05-07T13:24:36.550 回答
2

感谢@landau 的回答,使用此信息,我实现了一个报告目标大小的函数,允许人们快速检查计划中所有目标的大小:

library(tibble)
library(drake)

get_target_size <- function(target) {
    cache <- get_cache() # or storr::storr_rds(".drake")
    root  <- cache$driver$path
    hash  <- cache$driver$get_hash(target, namespace = "objects")
    path  <- file.path(root, "data", paste0(hash, ".rds"))
    if ( file.exists(path) ) {
        file.size(path)
    } else {
      NA
    }
}

load_mtcars_example()
make(my_plan, verbose = 0L)
tibble( target = my_plan$target, 
        size = sapply(my_plan$target, get_target_size))

输出是:

# A tibble: 15 x 2
   target                  size
   <chr>                  <dbl>
 1 report                    55
 2 small                    404
 3 large                    463
 4 regression1_small       2241
 ...

我认为这足以满足我的需求,并且理解将其作为 drake 的一部分来实现可能没有意义,除非有更通用的解决方案适用于任何存储类型。

于 2019-05-07T16:56:03.237 回答