【问题标题】:should .RData files be used to store functions?.RData 文件应该用于存储函数吗?
【发布时间】:2016-09-20 04:18:26
【问题描述】:

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

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

是否有理由对我没有看到的这种方法保持谨慎?

谢谢

【问题讨论】:

  • 我不知道你会被拒绝函数的任何基本功能(例如,调试和查看函数源的能力),但我也不知道它会给你带来什么.将它们存储在包中非常容易,允许将简单的源内 cmets 转换为手册页(通过 roxygen2),还有许多其他好处。
  • 我看不出它有什么真正的危害,但也没有任何好处。当然,您应该将函数和对象的源代码保存在某个地方。将 RData 文件用于对象的优点是某些对象可能需要大量时间来计算/定义,但函数没有这个问题,因此没有真正的优势。如果您觉得这很诱人,因为 loadsource 这两个命令太多了,我建议您保留一个小的加载脚本来完成所有加载和采购。然后,采购该单个脚本执行所有操作。
  • 这样您还可以进一步将您的对象等分解成更小、更有条理的部分,所有这些都由加载脚本以正确的顺序加载。
  • 扩展名是.RData,在那里保留函数没有害处,但函数的快乐地方是带有source()的包或.R文件。此外,当我们只想使用其他新数据中的函数时,我们将不得不加载我们不需要的旧数据。

标签: r rdata


【解决方案1】:

在我以前的工作中,我们曾经将闭包序列化:

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

然后

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

这可以让您将数据(例如系数)与函数捆绑在一起。不过要小心,您的库不会自动加载。

【讨论】:

    猜你喜欢
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 2020-05-25
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多