R基礎(chǔ) | 學會使用R project及R項目結(jié)構(gòu)示例

當我們分析項目的時候扬舒,最好是用文件夾+Project的形式來組織內(nèi)容蛉腌。

從零新建R項目

如果是比較大的分析項目最好在一開始就保存為一個rproject。

  1. 右上角Project右側(cè)倒三角,菜單中點擊New Project可以創(chuàng)建新項目顽聂。


    image.png

    橫線下面的是已經(jīng)創(chuàng)建過的項目名,可以點擊切換到其他項目宋雏。

  2. 創(chuàng)建新項目時需要指定一個文件夾芜飘,最好是一個新的文件夾。以后產(chǎn)生的R代碼磨总,圖片都會默認存在這個文件夾下嗦明。

從存在文件夾創(chuàng)建R項目

  1. 打開RStudio 點擊 File -> New Project....
  2. 選擇Existing Directory
  3. 點擊 Browse ,找到自己的項目文件夾
  4. 最后點擊 Create Project.

R項目結(jié)構(gòu)示例

一個基本的結(jié)構(gòu)如下:

.
└── 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:臨時數(shù)據(jù)
  • output

src 文件夾

因為可能會有其他非R腳本娶牌,因此文件夾不寫作R。
腳本組織方式:

  1. library模式:按照分析內(nèi)容的不同來分成不同子文件夾(ETL馆纳,transformation诗良,plotting)。
  2. 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更適用篮赢。

參考

  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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末齿椅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子启泣,更是在濱河造成了極大的恐慌涣脚,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寥茫,死亡現(xiàn)場離奇詭異遣蚀,居然都是意外死亡,警方通過查閱死者的電腦和手機坠敷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門妙同,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人膝迎,你說我怎么就攤上這事粥帚。” “怎么了限次?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵芒涡,是天一觀的道長柴灯。 經(jīng)常有香客問我,道長费尽,這世上最難降的妖魔是什么赠群? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮旱幼,結(jié)果婚禮上查描,老公的妹妹穿的比我還像新娘。我一直安慰自己柏卤,他們只是感情好冬三,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缘缚,像睡著了一般勾笆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桥滨,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天窝爪,我揣著相機與錄音,去河邊找鬼齐媒。 笑死蒲每,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的里初。 我是一名探鬼主播啃勉,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼双妨!你這毒婦竟也來了淮阐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤刁品,失蹤者是張志新(化名)和其女友劉穎泣特,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挑随,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡状您,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了兜挨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膏孟。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拌汇,靈堂內(nèi)的尸體忽然破棺而出柒桑,到底是詐尸還是另有隱情,我是刑警寧澤噪舀,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布魁淳,位于F島的核電站飘诗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏界逛。R本人自食惡果不足惜昆稿,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望息拜。 院中可真熱鬧溉潭,春花似錦、人聲如沸少欺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狈茉。三九已至,卻和暖如春掸掸,著一層夾襖步出監(jiān)牢的瞬間氯庆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工扰付, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留堤撵,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓羽莺,卻偏偏與公主長得像实昨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盐固,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項荒给,請點擊這里進行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,131評論 8 72
  • feisky云計算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,847評論 0 5
  • 在 Android Studio 構(gòu)建的項目中刁卜,基于 Gradle 進行項目的構(gòu)建志电,同時使用 Android DS...
    Ant_way閱讀 7,355評論 0 16
  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載蛔趴。 https://blog.csdn.net/zhaoyanj...
    勤奮的pangdunhu閱讀 2,032評論 0 1
  • 今天給大家講講風熱感冒挑辆。 一、“風寒感冒”和“風熱感冒”的區(qū)別孝情。 風寒感冒是風寒剛剛?cè)氡碛悴酰つw上的汗毛孔受寒后收縮...
    多彩程閱讀 6,152評論 0 5