当需要了解我的德雷克计划时,vis_drake_graph()
会派上用场,它会显示每个目标运行所需的时间。这对于确定是否应该分解目标以减少较小更改的重新运行时间非常有帮助。
我的需求与之相关:由于我的许多长期运行的目标都涉及对大型数据集的操纵,因此,了解每个缓存目标在磁盘上所占的大小对我来说很重要。这可以帮助我理解是否应该合并目标以防止存储大量中间结果(即使在更改合并目标的情况下也会增加重新运行时间)。
检查drake_graph_info()
返回的配置对象和中间对象,我找不到此信息。我当时想知道此信息以及可能通过指定vis_drake_graph()
的参数甚至仅通过手动检查config对象显示的其他信息(例如,上次运行目标的时间)可能非常有用。 / p>
问题是,有没有办法获取这些信息?
答案 0 :(得分:1)
drake
使用称为storr
的程序包来处理目标的存储。据我所知,storr
并不容易获得文件大小信息。但是,至少对于默认的storr_rds()
缓存类型,也许应该这样。您可以request it as a feature。如果实施,至少在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 package(v0.2.1)于2019-05-07创建
答案 1 :(得分:1)
感谢@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的一部分实施可能没有任何意义。