这可能是关于 S4 课程的最基本问题。
保存您定义的 S4 类以便您可以在其他地方重用它的最简单方法是什么。我有一个项目,我正在获取许多非常大的数据集并将其中的摘要信息编译成小型 S4 对象。因此,由于我将切换 R 会话来为每个数据集创建摘要对象,因此最好能够从保存的对象加载类的定义(或自动加载),而不必包含每个脚本顶部的对象的长定义(我认为无论如何这是不好的做法,因为定义对象的代码可能会变得不一致)。
那么 saveclass("myClass")、loadclass("myclass") 的语法是什么,还是我只是以错误的方式思考这个问题?
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
save(x, ascii=TRUE, file=fn)
dput(x, file=fn)
y <- dget(fn)
可以在这里找到原始来源。
从这个问题来看,我认为你真的do想要在每个脚本的顶部包含类定义(尽管不是字面上的;见下文),而不是保存类定义的二进制表示并加载它。原因是一般来说,与简单的文本表示相比,二进制表示更脆弱(受软件实现的变化影响)(例如,在不久的过去,S4 对象基于具有类属性的简单列表;更多最近,它们是围绕底层 C 级数据表示上设置的 S4“位”构建的)。
最好的做法是将类定义(和相关方法)包含在 R 包中,并在脚本顶部加载该包,而不是将定义复制并粘贴到每个脚本中。写包其实并不难;一个简单的入门方法是使用 Rstudio 创建一个“新项目”作为“R 包”。使用包中的版本号来跟踪您正在使用的类定义/方法的特定版本,并使用版本控制(例如 svn 或 git)来轻松跟踪您在开发过程中所做的更改/探索。阶级成熟。与您的同事分享,并最终与更大的 R 社区分享,让其他人从您的辛勤工作和洞察力中受益!
正如 GPT 所暗示的,这是最好的结果,
dput(as.list(instance), file = "instance.txt")