保存S4类的最简单方法

时间:2014-09-16 00:13:42

标签: r class save s4

可能是这里可以想象的关于S4类的最基本的问题。

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

那么saveclass(" myClass"),loadclass(" myclass")的语法是什么?或者我只是以错误的方式思考这个问题?

2 个答案:

答案 0 :(得分: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可以在这里找到。

答案 1 :(得分:2)

从这个问题来看,我认为你真的想要在每个脚本的顶部包含类定义(虽然不是字面意思;见下文),而不是保存类定义的二进制表示并加载。原因在于,与简单的文本表示相比,二进制表示更脆弱(受软件实现的变化影响)(例如,在不太遥远的过去,S4对象基于简单列表,一个类属性;最近它们是围绕底层C级数据表示的S4'位'构建的。)

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