drake
软件包就像Make专注于R的数据科学项目。它检测依赖关系的变化,以决定是否构建下游目标。最上游的依赖项通常是用户定义的函数,R6
类等。要检测更改,drake
依赖于序列化和哈希处理。
出于drake
的目的,对于包含函数的对象,序列化过于敏感。例如,当我调用R6
方法时,即使类本身没有任何有意义的更改,该类的内部也会发生变化。正如Winston Chang指出here时一样,headers
对琐碎的记录保持反应过度(在serialize()
可见)。
.Internal(inspect())
答案 0 :(得分:1)
作为解决方法,您可以将R6
类定义包装在一个函数中:
没有总结:
library(drake)
library(digest)
library(R6)
some_class <- R6Class(
"some_class",
private = list(x = NULL),
public = list(
initialize = function(x) {
private$x <- x
}
)
)
plan <- drake_plan(
new_obj = some_class$new(x = 10)
)
make(plan)
> target new_obj
make(plan)
> target new_obj
结束语:
new_object <- function(x) {
some_class <- R6Class(
"some_class",
private = list(x = NULL),
public = list(
initialize = function(x) {
private$x <- x
}
)
)
some_class$new(x = x)
}
plan <- drake_plan(
new_obj = new_object(10)
)
make(plan)
> target new_obj
make(plan)
v All targets are already up to date.