R 保存S4类的最简单方法

R 保存S4类的最简单方法,r,class,save,s4,R,Class,Save,S4,可能是关于S4课程最基本的问题 保存已定义的S4类以便在其他地方重用的最简单方法是什么。我有一个项目,我正在获取大量非常大的数据集,并将它们的摘要信息编译成小型对象。因此,由于我将切换R会话来为每个数据集创建摘要对象,因此最好能够从保存的对象加载类的定义(或让它自动加载),而不必在每个脚本的顶部包含对象的长定义(我认为这是一种糟糕的做法,因为定义对象的代码可能会变得不一致) 那么,saveclass(“myClass”)、loadclass(“myClass”)的语法是什么呢?或者我只是用错误的

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

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

那么,saveclass(“myClass”)、loadclass(“myClass”)的语法是什么呢?或者我只是用错误的方式思考这个问题

setClass("track", representation(x="numeric", y="numeric"))
x <- new("track", x=1:4, y=5:8)
从中重新生成数据的ASCII文本表示形式 dput(x,file=fn)
y从问题来看,我认为您确实希望在每个脚本的顶部包含类定义(虽然不是字面意义上的;请参见下文),而不是保存类定义的二进制表示并加载它。原因是二进制表示更脆弱(取决于软件实现的变化)与简单的文本表示法相比(例如,在不太遥远的过去,S4对象基于具有类属性的简单列表;最近,它们围绕基础C级数据表示法上的S4“位”集构建)


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

典型的方法是制作一个包并加载它。
fn <- tempfile()
save(x, ascii=FALSE, file=fn)
rm(x)
load(fn)
x
save(x, ascii=TRUE, file=fn)
dput(x, file=fn)
y <- dget(fn)