終于拯欧,我也出了篇R語言入門手冊详囤!

1 什么是R語言
R語言是一個開源的數(shù)據分析環(huán)境,起初是由數(shù)位統(tǒng)計學家建立起來,以更好的進行統(tǒng)計計算和繪圖藏姐,這篇wiki中包含了一些基本情況的介紹隆箩。由于R可以通過安裝擴展包(Packages)而得到增強,所以其功能已經遠遠不限于統(tǒng)計分析羔杨,如果感興趣的話可以到官方網站了解關于其功能的更多信息捌臊。

至于R語言名稱的由來則是根據兩位主要作者的首字母(Robert Gentleman and Ross Ihaka),但過于簡短的關鍵詞也造成在搜索引擎中很不容易找到相關的資料兜材。不過這個專門的搜索網站可以幫到你理澎。

2 為什么要學習R語言點我,給你一千個R的理由
可能你想說曙寡,“我已經學會了spss/sas/stata...糠爬,為什么還要去學習R呢?”如下幾方面可能會吸引到你:

  • 編程入門語言: 如果你之前沒有編程經驗举庶,但是學習工作中經常需要計算执隧、統(tǒng)計、繪圖户侥,那R是你的首選(Python也許不太同意殴玛,不管他)。語法結構簡單添祸,上手較快滚粟,而且函數(shù)和pckages都有很好的實例文檔。R是一門自學型語言刃泌,來R吧凡壤,你不會孤獨。

  • R是免費開源軟件:現(xiàn)在很多學術期刊都對分析軟件有版權要求耙替,而免費的分析工具可以使你在這方面不會有什么擔心亚侠。另一方面,如果學術界出現(xiàn)一種新的數(shù)據分析方法俗扇,那么要過很長一段時間才會出現(xiàn)在商業(yè)軟件中硝烂。但開源軟件的好處就在于,很快就會有人將這種方法編寫成擴展包铜幽,或者你自己就可以做這件工作滞谢。

  • 命令行工作方式:許多人喜歡類似SPSS菜單式的操作,這對于初學者來說很方便入門除抛,但對于數(shù)據分析來說狮杨,命令行操作會更加的靈活,更容易進行編程和自動化處理到忽。而且命令行操作會更容易碎辖蹋酷,不是嘛,一般人看到你在狂敲一推代碼后得到一個分析結果护蝶,對你投來的目光是會不一樣的华烟。

  • 小巧而精悍:R語言的安裝包更小,大約不到40M持灰,相比其它幾個大家伙它算是非常小巧精悍了垦江。目前R語言非常受到專業(yè)人士歡迎,根據對數(shù)據挖掘大賽勝出者的調查可以發(fā)現(xiàn)搅方,他們用的工具基本上都是R語言比吭。此外,從最近幾次R語言大會上可以了解到姨涡,咨詢業(yè)衩藤、金融業(yè)、醫(yī)藥業(yè)都在大量的使用R語言涛漂,包括google/facebook的大公司都在用它赏表。因此,學習R語言對你的職業(yè)發(fā)展一定是有幫助的匈仗。

3 R語言的學習方法
學習R是一件非常輕松的事情瓢剿,初學者需要記住的就是:

利用豐富的幫助文檔
親手鍵入代碼并理解其意義
在筆記里記下一些重點或心得(個人推薦Evernote)
堅持練習,對手邊的數(shù)據進行應用分析
理解背景知識悠轩,細節(jié)很重要间狂。

R的獲取
R包(package)

R包(package):R函數(shù)、數(shù)據火架、幫助文件鉴象、預編譯代碼以一種定義完善的格式組成的集合

.libPaths("E:/Rstudio/R_packages") #指定安裝包的路徑
聯(lián)網安裝
install.packages(“vegan”) #安裝普通包
source(“https://bioconductor.org/biocLite.R”)#安裝Bioconductor包
biocLite("DESeq2")

安裝本地zip包
Packages>install packages from local files

library(vegan) #加載包,也可用require()
update.packages("vegan") #包的更新
installed.packages() #查看已安裝的包

1 基礎數(shù)據結構

1.1 向量

#創(chuàng)建向量
a <-c(1, 2, 3, 4, 5, 6)
b<-c("one", "two", "three")
c<-c(TRUE, FALSE, TRUE, TRUE, FALSE)
#向量索引
a[2] #第二個元素
a[-2] #刪除第二個元素
a[c(2:4)] #取出第二到第四個元素

[1] 2
[1] 1 3 4 5 6
[1] 2 3 4

1.2 矩陣

#創(chuàng)建矩陣
mymat <- matrix(c(1:10), nrow=2, ncol=5, byrow=TRUE)
#矩陣索引
mymat[2,] #取第二行
mymat[,2] #取第二列
mymat[1,5] #第一行第五列的元素

1.3 數(shù)組

#創(chuàng)建數(shù)組
myarr <- array(c(1:12),dim=c(2,3,2))
dim(myarr) #取矩陣或數(shù)組的維度
myarr[1,2,1] #取第一個矩陣的第一行第二列

1.4 數(shù)據框


#創(chuàng)建數(shù)據框
kids <- c("Wang", "Li")
age <- c("18", "16")
df <- data.frame(kids, age)
#數(shù)據框索引
df[1,] #第一行
df[,2] #第二列
df[1:2,1:2]#前兩行何鸡,前兩列
df$kids #根據列名稱
#數(shù)據框常用函數(shù)
str(df) #數(shù)據框的結構
rownames(df) #行名稱
colnames(df) #列名稱

1.4.1 因子變量

變量:類別變量纺弊,數(shù)值變量
類別數(shù)據對于分組數(shù)據研究非常有用。(男女骡男,高中低)
R中的因子變量類似于類別數(shù)據淆游。

#向量因子化
status<-c("Poor", "Improved", "Improved","Excellent", "Poor")
status<-rep(status,15)
status<-factor(status,ordered=TRUE,
               levels= c("Poor","Improved", "Excellent"),
               labels=c("P","I","E"))

index <- sample(1:100,75)
plotdata <- data.frame(index,status)
attach(plotdata)
boxplot(index~status,col="red")

類別變量,有序變量稱為因子隔盛,決定了數(shù)據的分析方式和視覺呈現(xiàn)形式
Attach()可以將數(shù)據框添加到R的搜索路徑中犹菱,當R遇到一個變量名后,將檢測搜索路徑中的數(shù)據框骚亿,定位這個變量

1.5 列表

列表以一種簡單的方式組織和調用不相干的信息
R函數(shù)的許多運行結果都是以列表的形式返回

#創(chuàng)建列表
lis <- list(name='fred',
    wife='mary',
    no.children=3,
    child.ages=c(4,7,9))
#列表索引
lis$name #列表組件名
lis[[1]] #列表位置訪問
常用函數(shù)

R流程控制

p <- 0.1 
if(p<=0.05){
  print("p<=0.05!")
}else{
  print("p>0.05!")
}
for(i in 1:10) {
  print(i)
}
i <- 1
while(i<10) 
   {
    print(i)
    i <- i + 1
  }
v <- LETTERS[1:6]
for (i in v){
  if(i == 'D'){
    next
  }
  print(i)
}
v <- LETTERS[1:6]
for (i in v){
  if(i == 'D'){
    break
  }
  print(i)
}

2.5 R函數(shù)

函數(shù)是組織好的已亥,可重復使用的,用來實現(xiàn)單一来屠,或相關聯(lián)功能的代碼段

rcal<-function(x,y)
{
  z <- x^2 + y^2; 
  result<-sqrt(z) ;
  result;
}
rcal(3,4)# 調用函數(shù)

3讀寫數(shù)據

#數(shù)據讀入
#getwd()
setwd('C:/Users/Administrator/Desktop/file')
dir()
top<-read.table("otu_table.p10.relative.tran.xls",header=T,row.names=1,sep='\t',stringsAsFactors = F)
top10<-t(top)
head(top10, n=2)
#數(shù)據寫出
logtop10<-log(top10+0.000001)
write.csv(logtop10,file="logtop10.csv", quote=FALSE,  row.names = TRUE)
write.table(logtop10,file="logtop10.xls",sep="\t", quote=FALSE, 
    row.names = TRUE, col.names = TRUE)

其他常用函數(shù)


4 數(shù)據清理

4.1 tidyr包

tidyr包的四個函數(shù)
寬數(shù)據轉為長數(shù)據:gather()
長數(shù)據轉為寬數(shù)據:spread()
多列合并為一列: unite()
將一列分離為多列:separate()

library(tidyr)
gene_exp <- read.table('geneExp.csv',header = T,sep=',',stringsAsFactors = F)
head(gene_exp)
#gather 寬數(shù)據轉為長數(shù)據
gene_exp_tidy <- gather(data = gene_exp, key = "sample_name", value = "expression", -GeneID)
head(gene_exp_tidy)
#spread 長數(shù)據轉為寬數(shù)據
gene_exp_tidy2<-spread(data = gene_exp_tidy, key = "sample_name", value = "expression")
head(gene_exp_tidy2)

4.2 dplyr包

dplyr包五個函數(shù)用法:
篩選: filter
排列: arrange()
選擇: select()
變形: mutate()
匯總: summarise()
分組: group_by()

library(tidyr)
library(dplyr)
gene_exp <- read.table("geneExp.csv",header=T,sep=",",stringsAsFactors = F)
gene_exp_tidy <- gather(data = gene_exp, key = "sample_name", value = "expression", -GeneID)
#arrange 數(shù)據排列
gene_exp_GeneID <- arrange(gene_exp_tidy, GeneID)#降序加desc
head(gene_exp_GeneID )
#filter 數(shù)據按條件篩選
gene_exp_fiter <- filter(gene_exp_GeneID ,expression>10)
head(gene_exp_fiter)
#select 選擇對應的列
gene_exp_select <- select(gene_exp_fiter ,sample_name,expression)
head(gene_exp_select)

5 繪圖

5.1 長數(shù)據與寬數(shù)據

library(tidyr)
library(ggplot2)
#基礎繪圖
file <- read.table("geneExp.csv",header=T,sep=",",stringsAsFactors = F,row.names = 1)
#寬數(shù)據
file
barplot(as.matrix(file),names.arg = colnames(file), beside =T ,col=terrain.colors(6))
legend("topleft",legend = rownames(file),fill = terrain.colors(6))
#ggplot2繪圖
gene_exp <- read.table("geneExp.csv",header=T,sep=",",stringsAsFactors = F)
gene_exp_tidy <- gather(data = gene_exp, key = "sample_name", value = "expression", -GeneID)
#長數(shù)據
head(gene_exp_tidy)
ggplot(gene_exp_tidy,aes(x=sample_name,y=expression,fill=GeneID)) + geom_bar(stat='identity',position='dodge')

5.2 圖形參數(shù)位置

x <- rnorm(20, 2, 1)
y <- rnorm(20, 4, 2)
plot(x, y, cex=c(1:3), type="p", pch=19, col = "blue",
     cex.axis=1.5, col.axis="darkgreen", font.axis=2,
     main="這是主標題:plot初試", font.main=2, cex.main=2, col.main="green",
     sub="這是副標題:圖1", font.sub=3, cex.sub=1.5, col.sub="red",
     xlab="這是x軸標簽", ylab="這是y軸標簽",cex.lab=1.5, font.lab=2, col.lab="grey20",
     xlim=c(0,3), ylim=c(0,7))
abline(h=2, v=3, lty=1:2, lwd=2,col="red")
legend("topright", legend="我是圖例\n我在這兒",
      text.col="red", text.width=0.5)
#Rnorm正態(tài)分布 個數(shù) 平均值 標準差 plot是泛型函數(shù),根據輸入類型的不同而變化
#Type p 代表點 l 代表線 b 代表兩者疊加

  • 圖形參數(shù):
    符號和線條:pch、cex俱笛、lty捆姜、lwd
    顏色:col、col.axis迎膜、col.lab泥技、col.main、col.sub磕仅、fg珊豹、bg
    文本屬性:cex、cex.axis榕订、cex.lab店茶、cex.main、cex.sub劫恒、font贩幻、font.axis、font.lab两嘴、font.main丛楚、font.sub

  • 文本添加、坐標軸的自定義和圖例
    title()憔辫、main趣些、sub、xlab贰您、ylab喧务、text()
    axis()、abline()
    legend()

  • 多圖繪制時候枉圃,可使用par()設置默認的圖形參數(shù)
    par(lwd=2, cex=1.5)

  • 圖形參數(shù)設置:
    par(optionname=value,…)
    par(pin=c(width,height)) 圖形尺寸
    par(mfrow=c(nr,nc)) 圖形組合功茴,一頁多圖
    layout(mat) 圖形組合,一頁多圖
    par(mar=c(bottom,left,top,right)) 邊界尺寸
    par(fig=c(x1,x2,y1,y2),new=TURE) 多圖疊加或排布成一幅圖

#圖形組合:
attach(mtcars)
opar <- par(no.readonly=TRUE) #復制當前圖形參數(shù)設置
par(mfrow=c(2,2))#設置圖形參數(shù)
#layout(matrix(c(1,2,2,3),2,2,byrow=TRUE))
plot(wt,mpg,main="Scatterplot of wt vs mpg")
hist(wt,main="Histogram of wt")
boxplot(wt,main="Boxplot of wt")
par(opar) #返回原始圖形參數(shù)
detach(mtcars)

5.3 柱形圖

file <- read.table("barData.csv",header=T,row.names=1,sep=",",stringsAsFactors = F)
dataxx <- as.matrix(file) #轉化為矩陣
cols <- terrain.colors(3) #抽取顏色
#誤差線函數(shù)
plot.error <- function(x, y, sd, len = 1, col = "black") {
  len <- len * 0.05
    arrows(x0 = x, y0 = y, x1 = x, y1 = y - sd, col = col, angle = 90, length = len)
    arrows(x0 = x, y0 = y, x1 = x, y1 = y + sd, col = col, angle = 90, length = len) 
} 
x <- barplot(dataxx, offset = 0, ylim=c(0, max(dataxx) * 1.1),axis.lty = 1, names.arg = colnames(dataxx), col = cols, beside = TRUE) 
box() 
legend("topright", legend = rownames(dataxx), fill = cols, box.col = "transparent") 
title(main = "An example of barplot", xlab = "Sample", ylab = "Value") 
sd <- dataxx * 0.1 
for (i in 1:3) {
  plot.error(x[i, ], dataxx[i, ], sd = sd[i, ])
}

實例

5.4 二元圖

圖片.png
matdata <- read.table("plot_observed_species.xls", header=T)
tbl_df(matdata) #查看數(shù)據屬性和結構
y<-matdata[,2:145]
attach(matdata)
matplot(series,y, 
        ylab="Observed Species Number",xlab="Sequences Number",
        lty=1,lwd=2,type="l",col=1:145,cex.lab=1.2,cex.axis=0.8)
legend("topleft",lty=1, lwd=2, legend=names(y)[1:8], 
       cex=0.5,col=1:145)
detach(matdata)

5.5 餅狀圖

relative<-c(0.270617,0.177584,0.194911,0.054685,0.048903,0.033961, 0.031195,0.188143)
taxon<-c("Sordariales","Pleosporales","Agaricales","Hypocreales",   "Pezizales","Eurotiales","Helotiales","Others")
ratio<-round(relative*100,2)
ratio<-paste(ratio,"%",sep="")
label<-paste(taxon,ratio,sep=" ")
pie(relative,labels=label, main="ITS1-Sample S1",   radius=1,col=rainbow(length(label)),cex=1.3)
library(plotrix)
fan.plot(relative,labels=label,main="Fan plot")
pie3D(relative,labels=label, height=0.2, theta=pi/4, explode=0.1, col=rainbow(length(label)),  border="black",font=2,radius=1,labelcex=0.9)

5.6 直方圖

seqlength<-rnorm(1000, 350, 30)
hist(seqlength,breaks=100,
     col="red",freq=FALSE, 
     main="Histogram with dengsitycurve",
     ylab="Density", xlab="Sequence length")
lines(density(seqlength),col="blue4",lwd=2)

5.7 聚類圖

clu <- read.table("unweighted_unifrac_dm.txt", header=T, row.names=1, sep="\t")
head(clu)
dis <- as.dist(clu)
h <- hclust(dis, method="average")
plot(h, hang = 0.1, axes = T, frame.plot = F, main="Cluster Dendrogram based on unweighted_unifrac", sub="UPGMA")

5.8 維恩圖

library(VennDiagram)
ven<-list(sample1=20:50,  sample2=c(1:30,50:80), sample3=40:90, sample4=c(10:30,70:100))
venn.diagram(ven, filename='venn.png', cex=1.2, col="black", alpha= 0.50,lwd =1.2, cat.cex=1.4,
               fill=c("cornflowerblue", "green", "Gold1","darkorchid1"),  margin=0.15)

圖片輸出

  • 直接導出


  • 命令
pdf(file="file.pdf", width=7, height=10)
png(file="file.png",width=480,height=480)
jpeg(file="file.png",width=480,height=480)
tiff(file="file.png",width=480,height=480)

dev.off()

本文在發(fā)表之后第二天被【R語言中文社區(qū)】全文轉載孽亲,感謝小編的信任坎穿。學習R語言一個不斷積累的過程,不斷地記錄和總結才會不斷進步返劲。R是有好的玲昧,她是我編程之旅的初戀,雖然用的不怎么精篮绿,感情還是有的孵延。在簡書上的這篇文章我會根據自己的學習不斷更新的。

下面是是這篇文章在【R語言中文社區(qū)】公眾號上面的鏈接亲配,有我青澀的自我介紹:
終于尘应,我也出了篇R語言入門手冊惶凝!


R|home
統(tǒng)計之都
雪晴數(shù)據
R語言基礎入門之一:引言
R語言在生態(tài)學研究中的應用分析
為什么生態(tài)學家要學習Python或者R?
Statistical tools for high-throughput data analysis
why-use-the-r-language
Why R? The pros and cons of the R language
Why use R? Five reasons

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末犬钢,一起剝皮案震驚了整個濱河市苍鲜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玷犹,老刑警劉巖混滔,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異歹颓,居然都是意外死亡坯屿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門巍扛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來领跛,“玉大人,你說我怎么就攤上這事电湘「艚冢” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵寂呛,是天一觀的道長怎诫。 經常有香客問我,道長贷痪,這世上最難降的妖魔是什么幻妓? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮劫拢,結果婚禮上肉津,老公的妹妹穿的比我還像新娘。我一直安慰自己舱沧,他們只是感情好妹沙,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著熟吏,像睡著了一般距糖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上牵寺,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天悍引,我揣著相機與錄音,去河邊找鬼帽氓。 笑死趣斤,一個胖子當著我的面吹牛,可吹牛的內容都是我干的黎休。 我是一名探鬼主播浓领,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼玉凯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了镊逝?” 一聲冷哼從身側響起壮啊,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤嫉鲸,失蹤者是張志新(化名)和其女友劉穎撑蒜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玄渗,經...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡座菠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了藤树。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浴滴。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖岁钓,靈堂內的尸體忽然破棺而出升略,到底是詐尸還是另有隱情,我是刑警寧澤屡限,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布品嚣,位于F島的核電站,受9級特大地震影響钧大,放射性物質發(fā)生泄漏翰撑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一啊央、第九天 我趴在偏房一處隱蔽的房頂上張望眶诈。 院中可真熱鬧,春花似錦瓜饥、人聲如沸逝撬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宪潮。三九已至,卻和暖如春帐我,著一層夾襖步出監(jiān)牢的瞬間坎炼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工拦键, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谣光,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓芬为,卻偏偏與公主長得像萄金,于是被迫代替她去往敵國和親蟀悦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內容