【问题标题】:Easiest way to save an S4 class保存 S4 类的最简单方法
【发布时间】:2014-11-09 14:46:40
【问题描述】:

这可能是关于 S4 课程的最基本问题。

保存您定义的 S4 类以便您可以在其他地方重用它的最简单方法是什么。我有一个项目,我正在获取许多非常大的数据集并将其中的摘要信息编译成小的 S4 对象。因为我将因此切换 R 会话来为每个数据集创建摘要对象,所以能够从保存的对象加载类的定义(或让它自动加载)而不是必须包含每个脚本顶部的对象的长定义(我认为这是不好的做法,因为定义对象的代码可能会变得不一致)。

那么 saveclass("myClass"), loadclass("myclass") 的语法是什么,还是我只是想错了?

【问题讨论】:

  • 典型的方式是制作一个包并加载它。

标签: r class save s4


【解决方案1】:

从这个问题来看,我认为您确实确实希望在每个脚本的顶部包含类定义(尽管不是字面意思;见下文),而不是保存类定义的二进制表示并加载它。原因是二进制表示比简单的文本表示(例如,在不久的过去 S4 对象基于简单列表一个类属性;最近它们是围绕底层 C 级数据表示的 S4 '位' 集构建的)。

最好的做法是将类定义(和相关方法)包含在 R 包中,并在脚本顶部加载包,而不是将定义复制并粘贴到每个脚本中。写包其实并不难;一个简单的入门方法是使用 Rstudio 创建一个“新项目”作为“R 包”。使用包中的版本号来跟踪您正在使用的类定义/方法的特定版本,并使用版本控制(例如 svn 或 git)来轻松跟踪您所做的更改/探索阶级成熟。与您的同事以及最终与更大的 R 社区分享,让其他人从您的辛勤工作和洞察力中受益!

【讨论】:

    【解决方案2】:
    setClass("track", representation(x="numeric", y="numeric"))
    x <- new("track", x=1:4, y=5:8)
    

    另存为二进制

    fn <- tempfile()
    save(x, ascii=FALSE, file=fn)
    rm(x)
    load(fn)
    x
    

    另存为 ASCII

    save(x, ascii=TRUE, file=fn)
    

    从中重新生成数据的 ASCII 文本表示

    dput(x, file=fn)
    y <- dget(fn) 
    

    original source 可以在这里找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 2010-12-13
      相关资源
      最近更新 更多