2016-09-20 24 views
1

我使用.RData文件来存储对象(例如列表,向量等),然后将它们调用到其他脚本中,但是我想知道它们是否也应该用于存储函数(很可能是用户定义的函数)?应该使用.RData文件来存储功能?

我知道source()通常被推荐用于此目的(并且创建packages更是如此),但我认为它的一个优点是单个.RData文件可以包含多个对象 - 列表,数据框和函数,例如。使用load()保存需要调用对象的功能,然后单独使用功能source()

是否有理由谨慎使用这种方法,我没有看到?

谢谢

+1

我不知道你会被拒绝任何函数的基本功能(例如调试和查看函数源代码的能力),但我也不知道它会给你买什么。将它们存储在软件包中非常容易,可以将简单的源代码内注释转换为手册页(通过'roxygen2')以及其他许多优点。 – r2evans

+0

我没有看到任何真正的伤害,但也没有优势。当然,您应该将源代码保存在函数和对象的某处。为对象使用RData文件的优点是某些对象可能花费大量时间来计算/定义,但函数没有这个问题,因此没有真正的优势。如果你觉得这种诱惑,因为2个命令,'load'和'source'太多了,我会鼓励你保留一个小的加载脚本来完成所有的加载和采购。然后,找出单个脚本执行所有操作。 – Gregor

+0

通过这种方式,您还可以将对象等进一步细分为更小,更好组织的部分,所有这些部分都按正确的顺序由加载脚本加载。 – Gregor

回答

0

在我过去的工作中,我们使用序列化了封:

> f <- (function(x) function() x)(2) 
> f() 
[1] 2 
> saveRDS(f, file='/tmp/f') 

然后

> f <- readRDS('/tmp/f') 
> f() 
[1] 2 

这可以让你捆绑了数据(例如系数)功能。但要小心,你的库不会自动加载。

相关问题