• [R]R的工作流


    最近处理数据时,一直在纠结程序的结构该如何构建,以减少很多简单又很耗时的工作。

    刚好把Rob J Hyndman的blog给浏览了一遍,发现一篇2009年的文章,很有启发。

    原文: Workflow in R

    下面简单翻译一下:

    ----------------

    问题最初出现在StackOverflow上。我认为其中一个回答非常有启发,值得与各位分享。

    该回答建议将代码分成四个文件,存储在同一个项目文件夹中。这四个文件以如下顺序执行:

    load.R
    
    这个文件包含所有关于载入数据的代码。通常情况下,它都是一个从文件中读取数据的小文件。
    
    clean.R
    
    在这个文件中,对数据进行预处理,如处理缺失值,合并数据框,处理异常值。这个文件运行后,数据应该完成清洗,能够直接使用。预处理放在这里做,而不是放在原始载入数据那里,是因为这样可以完整记录你对数据做过的所有操作。
    
    function.R
    
    所有做实际分析时需要用到的函数都存储在这里。这个文件只做一件事情:定义数据分析时需要用到的函数(假设在载入或清洗数据,需要require自己的函数,可以将其包含在load.R或clean.R的头部)。需要特别指出的是,function.R不会对数据做任何改动。这意味着,你在修改这个文件后,不需要回头重复前面1&2步的步骤。而前两步在处理大数据集的时候,通常需要花费大量时间。
    
    do.R
    
    这个文件是实际做分析的代码。这个文件会使用function.R中定义的函数去计算数据,生成图形或图表等。报告或论文中所有的图表都应该在在这里编码生成。绝不要手工(即鼠标或菜单)生成图表,因为这会使图表的再生成变得麻烦。

    建议以上的每个文件运行过之后,都存一次工作空间(workspace)。

    这样做有许多好处。

    首先,当你在后续步骤中做了更改,无需每次重载之前的数据。

    其次,当你回顾一个旧的项目时,能够以一个相对快的过程去了解这个项目都做了什么事情 。

    同时它也迫使你对将要做的事情有一个结构性的思考,这十分有用。

     

    通常你会要写一段很小块的代码,不要用完就算了,也不想着去删除这些代码。这些代码要么需要特别注释,或者给它一个名称然后保存到文件中。所有的分析工作,从读取数据到产生最终的成果,应该都能够通过source()以上四个文件,反复生成,无需任何人工介入。

     

    我将以上流程在我的几个项目上实战了一下, 发现流程有些太拘束。尤其我的do.R文件通常会变得大且笨重。

    因此,我现在在使用下述流程:

    main.R

    这个文件只包含一些source语句,按顺序执行其他要用到的R文件。

    functions.R

    和上面一样,所有执行分析时需要用到的函数都放在这里。这个文件只定义分析过程中需要用到的函数,不做其他任何事情。

    xxx.R

    其他所有代码都被我放在形似xxx.R的文件中,由main.R按顺序依次调用。这些文件的数量和内容视项目而定。

    通常会包含上面提到的load.R和clean.R文件。我通常会使用多个文件来做实际的分析工作。(而不是全都放在do.R中)

    这个流程的重点是,执行main.R会将项目从头执行到尾。当数据更新,或函数改变时,这样只要source(main.R)就能一步再次执行整个分析过程。

    同时保持R文件整齐、文档化是个很重要的规则。这样当你回顾你一年前写过的代码时,你才能够很快知道各部分代码是干嘛的。这意味着需要你插入注释,并删除那些没有用的代码。

  • 相关阅读:
    POJ 3273 :Monthly Expense【二分+贪心】
    POJ 3104 Drying【二分】
    Codeforces Round #402 (Div. 2)
    PAT 天梯赛真题集
    PAT 乙级 (将剩下的做了)
    CCPC 2016-2017, Finals (慢慢做,慢慢更新)
    Spring注解开发
    SpringMVC+SSM框架
    Spring5 Framework(IOC+AOP+整合Mybatis事务)
    IDEA 使用小技巧
  • 原文地址:https://www.cnblogs.com/oDoraemon/p/5415848.html
Copyright © 2020-2023  润新知