R語言包的安裝
在R中大概有幾種包的安裝方式。
install.packages()常規包的安裝
括號里面包的名稱要加英文引號,在列出的CRAN鏡像站點列表中選擇一個進行下載,例如
install.packages(“ggplot2”)
安裝包的時候可以切換安裝源,如下所示:
install.packages(pkgs, lib, repos = getOption("repos"),
contriburl = contrib.url(repos, type),
method, available = NULL, destdir = NULL,
dependencies = NA, type = getOption("pkgType"),
configure.args = getOption("configure.args"),
configure.vars = getOption("configure.vars"),
clean = FALSE, Ncpus = getOption("Ncpus", 1L),
verbose = getOption("verbose"),
libs_only = FALSE, INSTALL_opts, quiet = FALSE,
keep_outputs = FALSE, ...)
使用格式為:
install.packages("ABC",repos="http://mirror.bjtu.edu.cn/ ")
使用devtools
從Github上安裝包
如果是要從GitHub上安裝包,需要先安裝devtools,如下所示:
install.packages("devtools")
install_github("genomicsclass/dagdata")
其它的包安裝命令,如下所示:
install.packages("installr") # 下載并安裝 installr 包
library(installr) # 裝載 installr 包
install.RStudio() # 下載并安裝 RStudio IDE
install.Rtools() # 你需要 Rtools 來構建自己的包
install.git() #git 提供了代碼的版本控制功能
如果要想把R包安裝到其他位置,可以使用以下代碼:
install.packages(
c("xts", "zoo"),
lib = "some/other/folder/to/install/to",
repos = "http://www.stats.bris.ac.uk/R/")
其中lib參數就是安裝的包的位置,repos就是安裝源。
通過BiocLite來安裝生信工具
生信很多工具是在bioconductor上,因此需要biocLite,由于R版本升級,現在安裝都是
BiocManager::install()
此處仍然列出,如下所示:
#source("https://bioconductor.org/biocLite.R")
#options(BioC_mirror="http://mirrors.ustc.edu.cn/bioc/")
# 使用相應的鏡像
#biocLite(c("ALL","CLL", "pasilla", "airway")) #數據包
#biocLite(c("limma","DESeq2", "clusterProfiler")) #軟件包
通過BiocManager來安裝生信工具
在使用bioconductor時由于需要在線連接才能安裝包,現在很多已經使用BiocManager的方式來安裝,安裝代碼如下所示:
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("ballgown", version = "3.8")
批量下載并且加載R包
list.of.packages <- c("xx", "yy") # replace xx and yy with package names
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
lapply(new.packages, require, character.only=T)
使用if語句安裝并加載包
通過if語句,可以判斷某個包是否存在,如果不存在,就先下載,后加載,如下所示:
#另外可以檢測某個包是否存在,只有不存在時才會安裝
if (! require ('reshape2')){
install.package("reshape2")
library(reshape2)
}
如果是bioconductor上的包,也可以按以下方式進行安裝:
if (! require ('CLL')){
options(BioC_mirror="http://mirrors.ustc.edu.cn/bioc/")
BiocInstaller::biocLite('CLL',ask = F, suppressUpdates = T)
}
包的加載
包的載入函數為library()
或require()
,安裝完包后,需要加載才能使用其中的函數,此時括號中不使用引號。兩者的不同之處在于library()載入之后不返回任何信息,而require()載入后則會返回TRUE,因此require()適合用于程序的書寫。
library(ggplot2)
require(foreign)
Loading required package: foreign
如果想不加載包就使用其中的函數,則需要使用雙冒號,即::
,看一個案例:
x <- rnorm(1000)
skewness(x)
運行結果如下所示:
skewness(x)
Error in skewness(x) : could not find function "skewness"
結果顯示,沒有skewness
這個函數,因為這個函數是moments
包中的函數,沒有加載這個包,就無法使用這個函數。現在我們在沒有加載這個包的情況下,使用雙冒號來看一下:
moments::skewness(x)
[1] -0.01674
再用library()
來使用一下:
library(moments)
skewness(x)
[1] -0.01674
使用雙冒號這種方式在一種情況下比較適合。
這種情況就是:假設我們同時加載了A包與B包,A包中有一個名為a()
的函數,B包中也有一個名為a()
的函數。此時,如果先導入A包,再導入B包,B包中的a()
函數就會屏蔽A包中的a()
函數,也就是說,這兩個同名函數就會出現沖突。
因此為了避免出現這種情況,可以不加載A包,也不加載B包,而是將它們的同名函數提取出來,如下所示:
fun1 <- A::a
fun2 <- B::a
如果你此時已經恰好載入一個包,想要解決綁定,就可以使用unloadNamespace()
函數即可,例如:
unloadNamespace("moments")
查看一個包的幫助
help(package="base")
卸載包
detach(),這是library()的反向操作,此操作主要是為了避免某些包中的函數名稱相同,造成沖突,注意與library()的參數不同,detach()參數為detach(package:包的名稱),library(包的名稱),例如:
library(ggplot2) #加載包
(.packages()) #列出當前已經加載的包
[1] "foreign" "ggplot2" "stats" "graphics" "grDevices" "utils"
[7] "datasets" "methods" "base"
detach(package:ggplot2) #卸載ggplot2包
(.packages()) #列出當前已經加載的包
[1] "foreign" "stats" "graphics" "grDevices" "utils" "datasets"
[7] "methods" "base"
刪除包remove.packages()
使用條件:R語言自帶的install.packages()
函數來安裝一個包時,都是默認安裝最新版的。 但是有些R包的開發者他會引用其它的一些R包,但是它用的是舊版本的功能,自己來不及更新或者疏忽了。 而我們又不得不用他的包,這時候就不得不卸載最新版包,轉而安裝舊版本包。
查詢加載的包
search()
search()
[1] ".GlobalEnv" "package:stats" "package:graphics"
[4] "package:grDevices" "package:utils" "package:datasets"
[7] "package:methods" "Autoloads" "package:base"
.libPaths()能夠顯示庫所在的位置
.libPaths()
[1] "C:/Users/Cloud/Documents/R/win-library/3.1"
[2] "C:/Program Files/R/R-3.1.3/library"
library()顯示庫中有哪些包
library()
backports Reimplementations of Functions Introduced Since
R-3.0.0
base64enc Tools for base64 encoding
bitops Bitwise Operations
bookdown Authoring Books and Technical Documents with R
Markdown
caTools Tools: moving window statistics, GIF, Base64,
ROC AUC, etc.
cellranger Translate Spreadsheet Cell Ranges to Rows and
Columns
digest Create Compact Hash Digests of R Objects
evaluate Parsing and Evaluation Tools that Provide More
Details than the Default
查看已經安裝的包
函數installed.packages()
還可以這么輸入代碼:
pkgs <- installed.packages()
colnames(pkgs)
結果如下所示:
pkgs <- installed.packages()
colnames(pkgs)
[1] "Package" "LibPath" "Version"
[4] "Priority" "Depends" "Imports"
[7] "LinkingTo" "Suggests" "Enhances"
[10] "License" "License_is_FOSS" "License_restricts_use"
[13] "OS_type" "MD5sum" "NeedsCompilation"
[16] "Built"
當需要檢查包是否已經安裝時,可以使用以下代碼:
c("moments", "Built") %in% installed.packages()[, "Package"]
結果如下所示:
c("moments", "Built") %in% installed.packages()[, "Package"]
[1] TRUE FALSE
查看包的版本
查看包的版本可以通過下面代碼實現:
[1] "3.2.0"
包的更新update.packages()
update.packages()
查看本地的包
查看默認加載的包,忽略基本的包
getOption("defaultPackages")
[1] "datasets" "utils" "grDevices" "graphics" "stats" "methods"
查看當前已經加載過的包
(.packages())
[1] "stats" "graphics" "grDevices" "utils" "datasets" "methods"
[7] "base"
顯示所有可用的包
(.packages(all.available=TRUE))
(.packages(all.available=TRUE))
[1] "bitops" "car" "caTools" "coin"
[5] "colorspace" "crayon" "curl" "dichromat"
[9] "digest" "evaluate" "formatR" "fun"
[13] "ggplot2" "gtable" "highr" "htmltools"
[17] "httr" "ISwR" "jsonlite" "KMsurv"
[21] "knitr" "labeling" "lme4" "magrittr"
[25] "maps" "maptools" "markdown" "MatrixModels"
[29] "memoise" "mime" "minqa" "mnormt"
[33] "modeltools" "multcomp" "munsell" "mvtnorm"
[37] "nloptr" "openssl" "pbkrtest" "plyr"
[41] "praise" "psych" "quantreg" "R6"
[45] "RColorBrewer" "Rcpp" "RcppEigen" "RCurl"
[49] "reshape2" "rmarkdown" "sandwich" "scales"
[53] "sp" "SparseM" "stringi" "stringr"
[57] "swirl" "testthat" "TH.data" "yaml"
[61] "zoo" "base" "boot" "class"
[65] "cluster" "codetools" "compiler" "datasets"
[69] "foreign" "graphics" "grDevices" "grid"
[73] "KernSmooth" "lattice" "MASS" "Matrix"
[77] "methods" "mgcv" "nlme" "nnet"
[81] "parallel" "rpart" "spatial" "splines"
[85] "stats" "stats4" "survival" "tcltk"
[89] "tools" "utils"
自定義啟動時候的加載包
如果需要長期使用某個包的話,每次開啟都需要輸入library(),比較麻煩,因此可以讓R啟動時自動加載某些包。在R的安裝目錄/etc/Rprofile.site加入下載語句:
例如讓R啟動時自動加載ggplot2包
local({old <- getOption(“defaultPackages”)
options(defaultPackages = c(old, “ggplot2”))})
安裝包,并加載包
if(!require("multcomp")){
install.packages("multcomp")
library(multcomp)
}
常用R包的搜集
數據導入
以下R包主要用于數據導入和保存數據
- feather:一種快速,輕量級的文件格式。在R和python上都可使用
- readr:實現表格數據的快速導入。中文介紹可參考這里
- readxl:讀取Microsoft Excel電子表格數據
- openxlsx:讀取Microsoft Excel電子表格數據
- googlesheets:讀取google電子表格數據
- haven:讀取SAS,SPSS和Stata統計軟件格式的數據
- httr:從網站開放的API中讀取數據
- rvest:網頁數據抓取包
- xml2:讀取HTML和XML格式數據
- webreadr:讀取常見的Web日志格式數據
- DBI:數據庫管理系統通用接口包
- RMySQL:用于連接MySQL數據庫的R包
- RPostgres:用于連接PostgreSQL數據庫的R包
- bigrquery用于連接Google BigQuery的R包
- PivotalR:用于讀取Pivitol(Greenplum)和HAWQ數據庫中的數據
- dplyr:提供了一個訪問常見數據庫的接口
- data.table:data.table包的
fread()
函數可以快速讀取大數據集- git2r:用于訪問git倉庫
數據整理
以下R包主要用于數據整理,以便于你后續建模分析:
- tidyr:用于整理表格數據的布局
- dplyr:用于將多個數據表連接成一個整齊的數據集
- purrr:函數式編程工具,在做數據整理時非常有用。
- broom:用于將統計模型的結果整理成數據框形式
- zoo:定義了一個名zoo的S3類型對象,用于描述規則的和不規則的有序的時間序列數據。
數據可視化
以下R包用于數據可視化:
ggplot2及其擴展:ggplot2包提供了一個強大的繪圖系統,并實現了以下擴展
- ggthemes:提供擴展的圖形風格主題
ggmap:提供Google Maps,Open Street Maps等流行的在線地圖服務模塊
ggiraph:繪制交互式的ggplot圖形
ggstance:實現常見圖形的橫向版本
GGally:繪制散點圖矩陣
ggalt:添加額外的坐標軸,geoms等
ggforce:添加額外geoms等
ggrepel:用于避免圖形標簽重疊
ggraph:用于繪制網絡狀、樹狀等特定形狀的圖形
ggpmisc:光生物學相關擴展
geomnet:繪制網絡狀圖形
ggExtra:繪制圖形的邊界直方圖
gganimate:繪制動畫圖
plotROC:繪制交互式ROC曲線圖
ggspectra:繪制光譜圖
ggnetwork:網絡狀圖形的geoms
ggradar:繪制雷達圖
ggTimeSeries:時間序列數據可視化
ggtree:樹圖可視化
ggseas:季節調整工具
lattice:生成柵欄圖
rgl:交互式3D繪圖
ggvis:交互式圖表多功能系統
htmlwidgets:一個專為R語言打造的可視化JS庫
- leaflet:繪制交互式地圖
dygraphs:繪制交互式時間序列圖
plotly:交互式繪圖包,中文介紹詳見這里
rbokeh:用于創建交互式圖表和地圖,中文介紹
Highcharter:繪制交互式Highcharts圖
visNetwork:繪制交互式網狀圖
networkD3:繪制交互式網狀圖
d3heatmap:繪制交互式熱力圖,中文介紹
DT:用于創建交互式表格
threejs:繪制交互式3d圖形和地球儀 -rglwidget:繪制交互式3d圖形
DiagrammeR:繪制交互式圖表
MetricsGraphics:繪制交互式MetricsGraphics圖
rCharts:提供了對多個javascript數據可視化庫(highcharts/nvd3/polychart)的R封裝。
coefplot:可視化統計模型結果
quantmod:可視化金融圖表
colorspace:基于HSL的調色板
viridis:Matplotlib viridis調色板
munsell:Munsell調色板
RColorBrewer:圖形調色板
igraph:用于網絡分析和可視化
latticeExtra:lattice繪圖系統擴展包
sp:空間數據工具
數據轉換
以下R包用于將數據轉換為新的數據類型
- dplyr:一個用于高效數據清理的R包。視頻學習課程
- magrittr:一個高效的管道操作工具包。
- tibble:高效的顯示表格數據的結構
- stringr:一個字符串處理工具集
- lubridate:用于處理日期時間數據
- xts:xts是對時間序列數據(zoo)的一種擴展實現,提供了時間序列的操作接口。
- data.table:用于快速處理大數據集
- vtreat:一個對預測模型進行變量預處理的工具
- stringi:一個快速字符串處理工具
- Matrix:著名的稀疏矩陣包
統計建模與推斷
下述R包是統計建模最常用的幾個R包,其中的一些R包適用于多個主題。
- car:提供了大量的增強版的擬合和評價回歸模型的函數。
- Hmisc:提供各種用于數據分析的函數
- multcomp:參數模型中的常見線性假設的同時檢驗和置信區間計算,包括線性、廣義線性、線性混合效應和生存模型。
- pbkrtest用于線性混合效應模型的參數Bootstrap檢驗
- MatrixModels:用于稠密矩陣和稀疏矩陣建模
- mvtnorm:用于計算多元正態分布和t分布的概率,分位數,隨機偏差等
- SparseM:用于稀疏矩陣的基本線性代數運算
- lme4:利用C++矩陣庫 Eigen進行線性混合效應模型的計算。
- broom:將統計模型結果整理成數據框形式
- caret:一個用于解決分類和回歸問題的數據訓練綜合工具包
- glmnet:通過極大懲罰似然來擬合廣義線性模型
- gbm:用于實現隨機梯度提升算法
- xgboost:全稱是eXtreme Gradient Boosting。是Gradient Boosting Machine的一個c++實現。目前已制作了xgboost工具的R語言接口。詳見統計之都的一篇介紹
- randomForest:提供了用隨機森林做回歸和分類的函數
- ranger:用于隨機森林算法的快速實現
- h2o:H2O是0xdata的旗艦產品,是一款核心數據分析平臺。它的一部分是由R語言編寫的,另一部分是由Java和Python語言編寫的。用戶可以部署H2O的R程序安裝包,之后就可以在R語言環境下運行了。
- ROCR:通過繪圖來可視化分類器的綜合性能。
- pROC:用于可視化,平滑和對比ROC曲線
溝通交流
以下R包用于實現數據科學結果的自動化報告,以便于你跟人們進行溝通交流。
- rmarkdown :用于創建可重復性報告和動態文檔
- knitr:用于在PDF和HTML文檔中嵌入R代碼塊
- flexdashboard:基于rmarkdown,可以輕松的創建儀表盤
- bookdown:以R Markdown為基礎,用于創作書籍和長篇文檔
- rticles:提供了一套R Markdown模板
- tufte:用于實現Tufte講義風格的R Markdown模板
- DT:用于創建交互式的數據表
- pixiedust:用于自定義數據表的輸出
- xtable:用于自定義數據表的輸出
- highr:用于實現R代碼的LaTeX或HTML格式輸出
- formatR:通過
tidy_source
函數格式化R代碼的輸出 - yaml:用于實現R數據與YAML格式數據之間的通信。
自動化分析
以下R包用于創建自動化分析結果的數據科學產品:
- shiny:一個使用R語言開發交互式web應用程序的工具。中文教程
- shinydashboard:用于創建交互式儀表盤
- shinythemes:給出了Shiny應用程序的常用風格主題
- shinyAce:為Shiny應用程序開發者提供Ace代碼編輯器。
- shinyjs:用于在Shiny應用程序中執行常見的JavaScript操作
- miniUI:提供了一個UI小部件,用于在R命令行中集成交互式應用程序
- shinyapps.io:為創建的Shiny應用程序提供托管服務
- Shiny Server Open Source:為Shiny應用程序提供開源免費的服務器
- Shiny Server Pro:為企業級用戶提供一個Shiny應用程序服務器
- rsconnect:用于將Shiny應用程序部署到shinyapps.io
- plumber:用于將R代碼轉化為一個web API
- rmarkdown:用于創建可重復性報告和動態文檔
- rstudioapi:用于安全地訪問RStudio IDE的API
程序開發
以下這些包主要用于開發自定義的R包:
- RStudio Desktop IDE:R的IDE。大家都懂,不用解釋。
- RStudio Server Open Source:開源免費的RStudio服務器
- RStudio Server Professional:商業版RStudio服務器
- devtools:一個讓開發R包變得簡單的工具集
- packrat:創建項目的特定庫,用于處理包的版本問題,增強代碼重現能力。
- drat:一個用于創建和使用備選R包庫的工具
- testthat:單元測試,讓R包穩定、健壯,減少升級的痛苦。
- roxygen2:通過注釋的方式,生成文檔,遠離Latex的煩惱。
- purrr:一個用于 提供函數式編程方法的工具
- profvis:用于可視化R代碼的性能分析數據
- Rcpp:用于實現R與C++的無縫整合。詳見統計之都文章
- R6:R6是R語言的一個面向對象的R包,可以更加高效的構建面向對象系統。
- htmltools:用于生成HTML格式輸出
- nloptr:提供了一個NLopt非線性優化庫的接口
- minqa:一個二次近似的優化算法包
- rngtools:一個用于處理隨機數生成器的實用工具
- NMF:提供了一個執行非負矩陣分解的算法和框架
- crayon:用于在輸出終端添加顏色
- RJSONIO:rjson是一個R語言與json進行轉的包,是一個非常簡單的包,支持用 C類庫轉型和R語言本身轉型兩種方式。
- jsonlite:用于實現R語言與json數據格式之間的轉化
- RcppArmadillo:提供了一個Armadillo C++ Library(一種C++的線性代數庫)的接口
實驗數據
以下R包給出了案例實戰過程中可用的訓練數據集:
- babynames:包含由美國社會保障局提供的三個數據集
- neiss:2009-2014年期間提供給美國急診室的所有事故報告樣本數據
- yrbss:美國疾病控制中心2009-2013年期間青年危險行為監測系統數據
- hflights:
- USAboundaries:2011年全年休斯頓機場的所有航班數據
- rworldmap:國家邊界數據
- usdanutrients:美國農業部營養數據庫
- fueleconomy:美國環保署1984-2015年期間的燃油經濟數據
- nasaweather:包含了一個覆蓋中美洲的非常粗糙的24*24格地理位置和大氣測量數據。
- mexico-mortality:墨西哥死亡人數數據
- data-movies和ggplotmovies:來自互聯網電影數據庫imdb.com的數據
- pop-flows:2008年全美人口流動數據
- data-housing-crisis:經過清洗后的2008美國房地產危機數據
- gun-sales:紐約時報提供的有關槍支購買的每月背景調查統計分析數據
- stationaRy:從成千上萬個全球站點收集到的每小時氣象數據
- gapminder:摘自Gapminder的數據
- janeaustenr:簡·奧斯丁小說全集數據
查看R的版本
sessionInfo() # 要加括號
如下所示:
sessionInfo() # 要加括號
R version 3.4.0 (2017-04-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=Chinese (Simplified)_China.936 LC_CTYPE=Chinese (Simplified)_China.936
[3] LC_MONETARY=Chinese (Simplified)_China.936 LC_NUMERIC=C
[5] LC_TIME=Chinese (Simplified)_China.936
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] downloader_0.4 rafalib_1.0.0
loaded via a namespace (and not attached):
[1] compiler_3.4.0 tools_3.4.0 RColorBrewer_1.1-2 digest_0.6.15
查看R語言的內置數據集data()
R的基本包中有一個叫datasets
,里面全是示例數據集,供用戶練習用。同時也可以使用data()
來查看所有已經成功加載的包的數據集:
Data sets in package ‘datasets’:
AirPassengers Monthly Airline Passenger Numbers 1949-1960
BJsales Sales Data with Leading Indicator
BJsales.lead (BJsales) Sales Data with Leading Indicator
...
略
如果需要查看更完整的列表,包括已安裝的所有包的數據,可以使用下面代碼:
data(package = .packages(TRUE))
加載特定包中的數據集
如果想要訪問任意數據集里面的數據,可以使用data()函數,傳入數據集的名稱以及所在的包名(如果這個包已經被加載了,就可以不用packages="包名"這個以參數了),如下所示:
data("kidney", package = "survival")
head(kidney)
這個命令是調用survival
這個包中的kidney
這個數據集,如下所示:
data("kidney", package = "survival")
head(kidney)
id time status age sex disease frail
1 1 8 1 28 1 Other 2.3
2 1 16 1 28 1 Other 2.3
3 2 23 1 48 2 GN 1.9
4 2 13 0 48 2 GN 1.9
5 3 22 1 32 1 Other 1.2
6 3 28 1 32 1 Other 1.2
參考資料
- http://www.xueqing.tv/cms/article/198
- http://blog.fens.me/
- 學習R.[美] Richard,Cotton 著劉軍 譯
- R 從安裝開始:BiocLite 到 BiocManager
- R語言編程指南.任坤 著,王婷,趙孟韜,王澤賢 譯