當我們分析項目的時候扬舒,最好是用文件夾+Project的形式來組織內(nèi)容蛉腌。
從零新建R項目
如果是比較大的分析項目最好在一開始就保存為一個rproject。
-
右上角Project右側(cè)倒三角,菜單中點擊New Project可以創(chuàng)建新項目顽聂。
image.png
橫線下面的是已經(jīng)創(chuàng)建過的項目名,可以點擊切換到其他項目宋雏。
創(chuàng)建新項目時需要指定一個文件夾芜飘,最好是一個新的文件夾。以后產(chǎn)生的R代碼磨总,圖片都會默認存在這個文件夾下嗦明。
從存在文件夾創(chuàng)建R項目
- 打開RStudio 點擊 File -> New Project....
- 選擇Existing Directory
- 點擊 Browse ,找到自己的項目文件夾
- 最后點擊 Create Project.
R項目結(jié)構(gòu)示例
一個基本的結(jié)構(gòu)如下:
.
└── my_awesome_project
├── src
├── output
├── data
│ ├── raw
│ └── processed
├── reports
├── README.md
├── analysis.R
└── .gitignore
data文件夾
按需求可有這些子文件夾
- raw:對用戶write-only蚪燕,對R user read-only
- temp:臨時數(shù)據(jù)
- output
src 文件夾
因為可能會有其他非R腳本娶牌,因此文件夾不寫作R。
腳本組織方式:
- library模式:按照分析內(nèi)容的不同來分成不同子文件夾(ETL馆纳,transformation诗良,plotting)。
- pipeline模式:有一個主要的runner script鲁驶,將所有腳本按順序執(zhí)行鉴裹。
無論哪種方式,都要將函數(shù)定義和應(yīng)用分開。也就是說径荔,只有pipeline或runner scripts用來執(zhí)行函數(shù)督禽,其他的都是定義函數(shù)的。
另外腳本的組織可以視項目大小定总处。
- 所有函數(shù)定義腳本放在src的子文件夾中(按用途分類命名文件夾狈惫,比如src/data_engineering)。將直接執(zhí)行的腳本直接放在src下鹦马。適合較大的項目胧谈。
- 將函數(shù)定義腳本放在src下,而執(zhí)行腳本analysis.R放在根目錄荸频。適合小的項目菱肖。執(zhí)行腳本可能像下面這樣:
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
如果只是用某個包中的某個函數(shù),不需要library整個包遇绞。package::function(arg1, arg2, ...)
就可以了键袱。
可以有一個requirements.R, 在所有腳本前執(zhí)行。這個腳本中放一些基礎(chǔ)設(shè)置摹闽,比如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包的版本不一致,導(dǎo)致程序無法運行舵匾,常晨〉郑看到的錯誤信息是,你所運行的R包不支持3.X.X版本坐梯。將自己項目使用的包打包徽诲,這樣別人就可以順利的復(fù)現(xiàn)自己的結(jié)果了。
packrat的優(yōu)點:
- 獨立:為一個項目安裝新的或不同版本的包不會影響其他的項目吵血。它讓每一個項目都有自己獨立的包庫谎替。
- 便攜:可以方便的將自己的項目從一臺電腦轉(zhuǎn)移到另一臺電腦,甚至跨平臺蹋辅。
- 可重復(fù):它記錄你需要的每一個包的版本钱贯,并保證無論到哪里你都安裝的是同樣版本的包。
install.packages("packrat")
使用packrat要從創(chuàng)建項目初始開始侦另。先新建項目文件夾秩命。然后將這個文件夾初始化為packrat文件夾尉共。
packrat::init("~/projects/packrat_try")
image.png
Packrat project不同于R project的一點是,它有自己的庫硫麻。在這個項目中安裝的任何包都只針對這個project爸邢,而project外安裝的所有包對這個project都不可用。
image.png
項目文件夾下多了packrat文件夾拿愧。里面主要存儲安裝包的信息。
checkpoint
checkpoint可以
- 創(chuàng)建一個快照文件夾~/.checkpoint用來存包碌尔。
- 掃描我們的項目文件夾浇辜,通過library() and require()來確定我們用了哪些包
- 從MRAN 安裝包install.packages()到我們自己的快照文件夾
- 將我們的CRAN鏡像指向MRAN (修改options(repos))
創(chuàng)建和使用的代碼是一樣的⊥倨荩快照信息存在~/.checkpoint
library(checkpoint)
checkpoint("2015-04-26")
這兩行代碼放在自己的腳本的最上面柳洋。
兩個包的區(qū)別
checkpoint基于server端,因此負擔不在用戶這里叹坦,而在服務(wù)器上熊镣。服務(wù)器每天會記錄當天R所有包的版本號。代碼創(chuàng)建者只需要記錄快照日期募书,而使用者通過快照日期就可以安裝和創(chuàng)建者版本一致的R包绪囱。
Packrat需要用戶遠程數(shù)據(jù)同步自己的Packrat文件和代碼給另一個用戶。 這是一個很繁重的過程莹捡。 但對于包的版本不是更新到同一天鬼吵,或者有些包不在CRAN上面(github),那么packrat更適用篮赢。