美文网首页R语言
R基础 | 学会使用R project及R项目结构示例

R基础 | 学会使用R project及R项目结构示例

作者: 琼脂糖 | 来源:发表于2019-07-26 18:42 被阅读0次

    当我们分析项目的时候,最好是用文件夹+Project的形式来组织内容。

    从零新建R项目

    如果是比较大的分析项目最好在一开始就保存为一个rproject。

    1. 右上角Project右侧倒三角,菜单中点击New Project可以创建新项目。


      image.png

      横线下面的是已经创建过的项目名,可以点击切换到其他项目。

    2. 创建新项目时需要指定一个文件夹,最好是一个新的文件夹。以后产生的R代码,图片都会默认存在这个文件夹下。

    从存在文件夹创建R项目

    1. 打开RStudio 点击 File -> New Project....
    2. 选择Existing Directory
    3. 点击 Browse ,找到自己的项目文件夹
    4. 最后点击 Create Project.

    R项目结构示例

    一个基本的结构如下:

    .
    └── my_awesome_project
        ├── src
        ├── output
        ├── data
        │   ├── raw
        │   └── processed
        ├── reports
        ├── README.md
        ├── analysis.R 
        └── .gitignore
    
    image.png

    data文件夹

    按需求可有这些子文件夹

    • raw:对用户write-only,对R user read-only
    • temp:临时数据
    • output

    src 文件夹

    因为可能会有其他非R脚本,因此文件夹不写作R。
    脚本组织方式:

    1. library模式:按照分析内容的不同来分成不同子文件夹(ETL,transformation,plotting)。
    2. pipeline模式:有一个主要的runner script,将所有脚本按顺序执行。
      无论哪种方式,都要将函数定义和应用分开。也就是说,只有pipeline或runner scripts用来执行函数,其他的都是定义函数的。
      另外脚本的组织可以视项目大小定。
    • 所有函数定义脚本放在src的子文件夹中(按用途分类命名文件夹,比如src/data_engineering)。将直接执行的脚本直接放在src下。适合较大的项目。
    • 将函数定义脚本放在src下,而执行脚本analysis.R放在根目录。适合小的项目。执行脚本可能像下面这样:
    library(some_package)
    library(some_other_package)
    source("R/functions.R")
    source("R/utilities.R")
    

    output文件夹

    一般把输出图放在output/plots下面。

    reports文件夹

    报告pdf放在reports/下面,reporting code放在src下面。

    requirements and general settings

    如果只是用某个包中的某个函数,不需要library整个包。package::function(arg1, arg2, ...)就可以了。
    可以有一个requirements.R, 在所有脚本前执行。这个脚本中放一些基础设置,比如locale。还有CRAN install check。但更建议用Packrat。

    ## This is our requirements.R script
    ## TODO : include an `InstalledPackage` fallback
    require(googleAnalyticsR)
    require(lubridate)
    require(dataframes2xls)
    require(ggthemr)
    require(plyr)
    require(dplyr) # need to load plyr before dplyr & not the other way!
    require(tidyr)
    require(stringr)
    # require(bigQueryR)
    require(janitor)
    

    packrat

    与别人分享代码的时候,常常由于每个人机器上的R版本以及安装的R包的版本不一致,导致程序无法运行,常常看到的错误信息是,你所运行的R包不支持3.X.X版本。将自己项目使用的包打包,这样别人就可以顺利的复现自己的结果了。
    packrat的优点:

    • 独立:为一个项目安装新的或不同版本的包不会影响其他的项目。它让每一个项目都有自己独立的包库。
    • 便携:可以方便的将自己的项目从一台电脑转移到另一台电脑,甚至跨平台。
    • 可重复:它记录你需要的每一个包的版本,并保证无论到哪里你都安装的是同样版本的包。
      install.packages("packrat")
      使用packrat要从创建项目初始开始。先新建项目文件夹。然后将这个文件夹初始化为packrat文件夹。
      packrat::init("~/projects/packrat_try")
      image.png
      Packrat project不同于R project的一点是,它有自己的库。在这个项目中安装的任何包都只针对这个project,而project外安装的所有包对这个project都不可用。
      image.png
      项目文件夹下多了packrat文件夹。里面主要存储安装包的信息。

    checkpoint

    checkpoint可以

    • 创建一个快照文件夹~/.checkpoint用来存包。
    • 扫描我们的项目文件夹,通过library() and require()来确定我们用了哪些包
    • 从MRAN 安装包install.packages()到我们自己的快照文件夹
    • 将我们的CRAN镜像指向MRAN (修改options(repos))

    创建和使用的代码是一样的。快照信息存在~/.checkpoint

    library(checkpoint)
    checkpoint("2015-04-26")
    

    这两行代码放在自己的脚本的最上面。

    两个包的区别

    checkpoint基于server端,因此负担不在用户这里,而在服务器上。服务器每天会记录当天R所有包的版本号。代码创建者只需要记录快照日期,而使用者通过快照日期就可以安装和创建者版本一致的R包。

    Packrat需要用户远程数据同步自己的Packrat文件和代码给另一个用户。 这是一个很繁重的过程。 但对于包的版本不是更新到同一天,或者有些包不在CRAN上面(github),那么packrat更适用。

    参考

    1. R项目示例
    2. Beyond Basic R – Introduction and Best Practices
    3. Using-Projects
    4. structuring-r-projects/
    5. a-truly-reproducible-r-workflow
    6. checkpoint
      )
    7. packrat

    相关文章

      网友评论

        本文标题:R基础 | 学会使用R project及R项目结构示例

        本文链接:https://www.haomeiwen.com/subject/ujscrctx.html