-
Notifications
You must be signed in to change notification settings - Fork 128
/
envir.R
59 lines (57 loc) · 1.54 KB
/
envir.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
assign_to_envir <- Vectorize(
function(target, value, config){
if (is_file(target) | !(target %in% config$plan$target)){
return()
}
assign(x = target, value = value, envir = config$envir)
},
c("target", "value")
)
prune_envir <- function(targets, config){
downstream <- lightly_parallelize(
targets,
function(vertex){
subcomponent(config$graph, v = vertex, mode = "out")$name
},
jobs = config$jobs
) %>%
unlist() %>%
unique()
already_loaded <- ls(envir = config$envir, all.names = TRUE) %>%
intersect(y = config$plan$target)
load_these <- nonfile_target_dependencies(
targets = targets,
config = config
) %>%
setdiff(y = c(targets, already_loaded))
keep_these <- nonfile_target_dependencies(
targets = downstream,
config = config
)
discard_these <- setdiff(x = config$plan$target, y = keep_these) %>%
Filter(f = is_not_file) %>%
intersect(y = already_loaded)
if (length(discard_these)){
console_many_targets(
discard_these,
pattern = "unload",
config = config
)
rm(list = discard_these, envir = config$envir)
}
if (length(load_these)){
console_many_targets(
load_these,
pattern = "load",
config = config
)
loadd(list = load_these, envir = config$envir, cache = config$cache,
verbose = FALSE)
}
invisible()
}
nonfile_target_dependencies <- function(targets, config){
dependencies(targets = targets, config = config) %>%
Filter(f = is_not_file) %>%
intersect(y = config$plan$target)
}