r - 一种不太敏感的序列化方法

标签 r serialization

背景

drake package 就像 Make for R-focused 数据科学项目。它检测依赖项的变化来决定是否构建下游目标。最上游的依赖项通常是用户定义的函数, R6 类等。要检测更改, drake 依赖于序列化和散列。

问题

对于 drake 的目的,当涉及到包含函数的对象时,序列化过于敏感。例如,当我调用 R6 时方法,即使类本身没有以任何有意义的方式改变,类的内部结构也会发生变化。正如 Winston Chang 帮助指出的那样here , serialize()对琐碎的记录 react 过度(可见 .Internal(inspect()) )。

library(digest)
library(R6)
some_class <- R6Class(
  "some_class",
  private = list(x = NULL),
  public = list(
    initialize = function(x) {
      private$x <- x
    }
  )
)
digest(some_class)
#> [1] "8ae94b2fe26264ca68eb39da640da5a1"
object <- some_class$new(123)
digest(some_class)
#> [1] "c4cc5a51c85cb2e4a773cf6e29684f7d"
object <- some_class$new(123)
digest(some_class)
#> [1] "f94260c269920b53db838d2fcf53271f"
object <- some_class$new(123)
digest(some_class)
#> [1] "f94260c269920b53db838d2fcf53271f"
object <- some_class$new(123)

问题
  • 有没有办法从序列化和/或散列中排除琐碎的内部结构?
  • 如果我需要实现自定义序列化方法,有哪些好的资源可以用来学习序列化和我需要访问的内部结构?
  • 最佳答案

    作为解决方案,您可以结束 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.
    

    关于r - 一种不太敏感的序列化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50969627/

    相关文章:

    r - 为国家冲突年份观察创建新变量和新数据行

    serialization - 如何防止 -Xcheckinit 干扰 Scala 对象的反序列化?

    java - 如何定义DefaultListableBeanFactory的序列化id?

    c# - "System.Web.HttpContext cannot be serialized because it does not have a parameterless constructor."

    r - 对于所有可能的二路表,可推广 for 循环吗?

    r - 在 R 中计算字符串

    r - 删除r中的空文件夹

    regex - 如何列出正则表达式字符类的成员,例如 [ :punct:]?

    c# - 实现 IXmlSerializable 时,如何只覆盖 ReadXml 或 WriteXml 而不是两者?

    kotlin - 如何将 Kotlin lambda 转换为 String 然后再转换回 lambda?