代码之家  ›  专栏  ›  技术社区  ›  Maiasaura

在R中,我要将自定义函数永久存储在哪里?

r
  •  28
  • Maiasaura  · 技术社区  · 16 年前

    我有几个在R中经常使用的自定义函数,而不是在每个脚本中使用该文件(或其部分),是否有某种方法可以将其添加到基R文件中,以便在使用R时始终可用?

    5 回复  |  直到 10 年前
        1
  •  22
  •   Dirk is no longer here    16 年前

    是,创建一个包。有许多教程以及 Writing R Extensions 随附手册 R .

    一开始似乎工作太多了,但从长远来看,你可能会很高兴这样做。

    然后你可以从 ~/.Rprofile . 对于非常短的代码,您也可以在那里定义它。

        2
  •  17
  •   Collin    16 年前

    对于一些有用的函数来说,包可能是杀伤力过大的。我要说的是,明确 source() 根据您的需要使用它们——至少它是明确的,这样如果您向某人发送您的代码,您就不会忘记包含那些其他脚本。

        3
  •  9
  •   Community Mohan Dere    9 年前

    另一种选择是使用 .Rprofile 文件。您可以在 ?Startup . 基本上,我们的想法是:

    …在当前目录或 在用户的主目录中(按该顺序)。用户配置文件是 源于工作区。

    你可以阅读 here 关于有多少人使用此功能。

        4
  •  2
  •   tim    10 年前

    公认的答案是最好的长期:做一个包裹。

    幸运的是,这样做的学习曲线已经被 devtools 软件包:它可以自动创建软件包(一个很好的帮助您从右脚起步),鼓励良好的实践(例如 roxygen2 并帮助使用在线版本控制(bitback、github或其他),与其他人共享您的包。它也有助于您顺利地提交CRAN。

    好文档 http://adv-r.had.co.nz http://r-pkgs.had.co.nz .

    create your package 例如,您可以:

    install.packages("devtools")
    devtools::create("path/to/package/pkgname")
    
        5
  •  1
  •   Mark Bravington    16 年前

    您还可以查看“mvbutils”包:它允许您设置一组分层的“任务”(其中包含工作区“.rdata”文件的文件夹),这样您就可以始终查看祖先任务中的内容(即祖先在search()路径中)。因此,您可以将自定义函数放在“开始任务”中,从中始终启动r;然后,您将更改为vWhaterproject-specific task,这样您就可以避免工作区混乱,但是您仍然可以使用(和编辑)自定义函数,因为开始任务始终是祖先任务。对象(包括函数)存储在“.rdata”文件中,因此会自动加载/保存,但函数有单独的文本备份功能。

    在R中有很多不同的工作方式,没有“一刀切”的最佳解决方案。也不容易找到一个概述!为我自己说话:

    • 我不喜欢每次都“获取”所有的信息;首先,它根本不适用于大数据集和/或模型运行结果。

    • 我想包裹是 坚硬的 创建和维护;有非常大的开销。在你写的前5个包之后,只要你至少每周写一次,它就会变得简单一点,这样你就不会忘记怎么写了,但实际上……

    实际上,“mvbutils”还拥有一系列工具,用于促进包的创建和(特别是)维护,这些工具旨在与任务层次结构系统顺利交互。我总是使用和编辑自己的软件包(包括编辑mvbutils本身);但如果不是“mvbutils”中的工具,我会在一周中的大多数日子里沮丧地磨牙。