R語(yǔ)言基礎(chǔ)

Day1 R語(yǔ)言基礎(chǔ)

數(shù)據(jù)類型

數(shù)值型(右對(duì)齊)、字符型(左對(duì)齊)、邏輯性(NA:存在但未知的東西*NA作為向量值和誰(shuí)在一起就是什么類型)

class( ) 判斷數(shù)據(jù)類型的函數(shù)

比較運(yùn)算的返回結(jié)果是邏輯值:>,<,>=,<=,==,!=

邏輯運(yùn)算:多個(gè)邏輯條件的鏈接? 與&? ,或|? 朵逝,非!

? eg:3<5&>5? ? FALSE? ? ? ? ? ? !(4>5)? ? ? TRUE

數(shù)據(jù)類型的判斷和轉(zhuǎn)換:is族函數(shù)? ? 返回值為邏輯值

? eg:is.numeric( ) 是否為數(shù)值型

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? as族函數(shù)? 實(shí)現(xiàn)數(shù)據(jù)類型之間的轉(zhuǎn)換

? eg:as.numeric( ) 將其他數(shù)據(jù)類型轉(zhuǎn)化為數(shù)值型

Day2

數(shù)據(jù)結(jié)構(gòu)(向量,數(shù)據(jù)框翔怎,矩陣,列表)

2.0數(shù)據(jù)框/向量

數(shù)據(jù)框約等于表格杨耙,是R語(yǔ)言內(nèi)部的數(shù)據(jù)不是真實(shí)存在

要求每一列的數(shù)據(jù)類型是統(tǒng)一的

數(shù)據(jù)框單獨(dú)拿出一列是向量赤套,可以視為一個(gè)整體,一個(gè)向量只能由一種數(shù)據(jù)類型珊膜,可以有重復(fù)值

2.1向量的生成

(1)用c( )逐一放在一起

c(1,2,3,4,5)? ? ? ? [1]? 1 2 3 4 5

? ( 2)連續(xù)的數(shù)字用冒號(hào)

1:5? ? ? ? ? ? [1]? 1 2 3 4 5

(3)有重復(fù)的用rep( )容握,有規(guī)律的序列用seq( ),隨機(jī)數(shù)用rnorm( )

rep("x",times=3/each=3)>each 參數(shù)即為每個(gè)重復(fù)的次數(shù)? ? ? ? ? ? [1]? "x" "x" "x"

seq(from=3,to=21,by=3)? ? ? ? [1]? 3 6 9 12 15 18 21

rnorm(n=3)? ? ? ? ? [1]? 生成三個(gè)隨機(jī)數(shù)

(4)通過組合產(chǎn)生更加復(fù)雜的向量

paste0(rep("x",times=3),1:3)? ? [1] "x1" "x2" "x3"? ? ? ? ? ? ? ?

? ? *paste和paste0之間的聯(lián)系:paste0是paste的簡(jiǎn)化版本车柠,paste的默認(rèn)分割符號(hào)是空格剔氏,可以使用sep參數(shù)指定分隔符,paste0是無(wú)縫連接

tips:數(shù)據(jù)類型轉(zhuǎn)換的優(yōu)先順序:字符型>數(shù)值型>邏輯型

在遵守規(guī)則的情況下竹祷,保留最多的信息

2.2對(duì)單個(gè)向量進(jìn)行的操作

(1)賦值

? ? ? ? x <- c(1,3,5,1)? #規(guī)范的賦值符號(hào):<-? 快捷鍵alt+“-”

? ? ? ? x=c(1,3,5,1)? ? #隨意的寫法

? ? ? ? #賦值+輸出一起實(shí)現(xiàn): (x<- c(1,3,5,1))

? ? ? ? #兩句或多句代碼寫在同一行:? x<- c(1,3,5,1);x

(2)簡(jiǎn)單的數(shù)學(xué)計(jì)算

? ? ? ? ? x+1? ? ? log(x)? ? ? ? ? sqrt(x)? ? ? ? ?

(3)根據(jù)某系條件進(jìn)行判斷谈跛,生成邏輯值向量

? ? ? ? ? x<- c(1,3,5,1)

? ? ? ? ? x>3? [1] FALSE FALSE TRUE FALSE

? ? ? ? ? x==3? [1]FALSE TRUE FALSE FALSE

(4)初級(jí)統(tǒng)計(jì)

? ? ? ? ? max(x)? 最大值? ? ? ? ? ? ? ? ? ? ? ? ? ? length(x)? 長(zhǎng)度

? ? ? ? ? min(x)? 最小值? ? ? ? ? ? ? ? ? ? ? ? ? ? unique(x)? 去重復(fù) (第二次到第多次出現(xiàn)則發(fā)生重復(fù),僅保留第一個(gè))

? ? ? ? ? mean(x)? 均值? ? ? ? ? ? ? ? ? ? ? ? ? ? ? duplicated(x)? 判斷是否重復(fù):重復(fù)了就是TRUE 沒有重復(fù)為FALSE

? ? ? ? median(x)? 中位數(shù)? ? ? ? ? ? ? ? ? ? ? ? table(x)? 重復(fù)值統(tǒng)計(jì)

? ? ? ? ? var(x) 方差? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? sort(x)? 從小到大排排序sort(x)? [1] 1 1 3 5

? ? ? ? ? sd(x)? 標(biāo)準(zhǔn)差? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? sort(x,decreasing=F)? [1] 1 1 3 5

? ? ? ? ? sum(x)? 總和? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? sort(x,decreasing=T)? [1] 5 3 1 1

R語(yǔ)言的"默認(rèn)思想"

?+函數(shù)名查幫助文檔

很多函數(shù)都有自己的默認(rèn)參數(shù)

2.3對(duì)兩個(gè)向量的操作

(1)比較運(yùn)算塑陵,生成等長(zhǎng)的邏輯向量

? ? x=c(1感憾,3,5令花,1)

? ? y=c(3阻桅,2,5兼都,6)

? ? x==y? [1] FALSE F T F

(2)數(shù)學(xué)計(jì)算

(3)連接

? ? paste(x,y,sep=",")? ? [1] "1,3" "3,2" "5,5" "1,6"

? ? 當(dāng)兩個(gè)向量長(zhǎng)度不一致鳍刷,發(fā)生循環(huán)補(bǔ)齊(發(fā)生條件:等位運(yùn)算,兩個(gè)向量元素與元素之間一對(duì)一的運(yùn)算俯抖,兩個(gè)向量長(zhǎng)度不相等)

? ? x = c(1输瓜,3,5芬萍,6尤揣,2)

? ? y = c(3,2柬祠,5)

? ? x == y? [1]? F? F T F T

利用循環(huán)補(bǔ)齊簡(jiǎn)化代碼

? paste0(rep("x",3),1:3)? == paste0("x",1:3)

? ? ? ? [1]? "x1"? "x2"? "x3"

(4)交集北戏,并集,差集

? ? ? x = c(1漫蛔,3嗜愈,5旧蛾,1)

? ? ? y = c(3,2蠕嫁,5锨天,6)

? ? ? 交集 intersect(x,y)? ? [1] 3 5

? ? ? 并集 union(x,y)? ? ? ? ? [1] 1 3 5 2 6

? ? ? 差集 setdiff(x,y)? ? ? ? [1] 1

? ? ? 差集 stediff(y,x)? ? ? ? [1] 2 6

重點(diǎn):%in%(沒有快捷鍵)

? x %in% y? #x的每個(gè)元素在y中存在嗎?

[1] FALSE TRUE TRUE FALSE

== ,+-*/ ,paste paste0 是等位運(yùn)算剃毒,循環(huán)補(bǔ)齊

2.4向量篩選(取子集)

對(duì)象[ 條件 ]:將TRUE對(duì)應(yīng)的值挑選出來(lái)病袄,F(xiàn)ALSE丟棄

(1)邏輯值取子集:eg:x=c(8,9,10,11,12)

? ? ? ? x==10

? ? ? [1] FALSE FALSE TRUE FALSE FALSE

? ? ? x[x==10]

(2)下標(biāo)位置取子集:eg:x=c(8,9,10,11,12)

? ? ? ? ? x[4] #取下標(biāo)為4的數(shù)? ==》11

? ? ? ? x[2:4]#取下標(biāo)為2到4的數(shù) ==》9 10 11

? ? ? ? x[-4]#去掉第四個(gè)下標(biāo)為4的數(shù)

2.5修改向量中的某個(gè)/某些元素:取子集+賦值

R語(yǔ)言內(nèi)的所有修改都需要經(jīng)過賦值,沒有賦值就沒有發(fā)生過

eg:x = x[x ==10]

以上為賦值操作

x? ? [1]? 8? 9? 10? 11? 12

(1)改一個(gè)元素

? x[4] <-? 40? ? ? ? [1] 8? 9? 10? 40? 12? ? *負(fù)號(hào)不能和<一起容易出錯(cuò)

(2)改多個(gè)元素

x[c(1,5)] <- c(80,20)? ? ? [1] 80? 9? 10? 40? 20

2.6簡(jiǎn)單向量作圖

eg:k1 = rnorm(12) ;12

? ? ? ? plot(k1) #簡(jiǎn)單做圖赘阀,橫坐標(biāo)為下標(biāo)益缠,縱坐標(biāo)為k1

eg:k2 = rep(c("a","b","c","d"),each=3) ;k2

? ? ? ? boxplot(k1~k2)? #箱線圖:k1為縱坐標(biāo),k2為橫坐標(biāo)

Day3 數(shù)據(jù)框基公,矩陣和列表

一維:向量vector

二維”表格“:矩陣matrix 是允許一種數(shù)據(jù)類型(常用的是數(shù)值型)

? ? ? ? ? ? ? ? ? ? ? 數(shù)據(jù)框data.frame每列只允許一種數(shù)據(jù)類型幅慌,列與列之間沒有限制


列表list可裝萬(wàn)物

數(shù)據(jù)框

3.1數(shù)據(jù)框來(lái)源

(1)用代碼新建

(2)由已有數(shù)據(jù)轉(zhuǎn)換或處理得到

(3)表格文件的讀取

(4)R語(yǔ)言的內(nèi)置數(shù)據(jù)

*View(volcano)可以看火山圖的內(nèi)部數(shù)據(jù)

3.2新建數(shù)據(jù)框

df1 <- data.frame(gene? ? =paste0("gene",1:4),

? ^? ? ? ? ? ? ? ? ? ? ? ? ? ? change=rep(c("up","down"),eanch-2),

? |? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? score? =c(5,3,-2,-4))

這個(gè)是變量名,不起決定作用

列名和列的內(nèi)容轰豆,列與列之間需要用逗號(hào)隔開

文件的讀惹烦铡:df2 <- read.csv("gene.csv")

3.3數(shù)據(jù)框的屬性

dim(df1)#返回df1的行數(shù)和列數(shù)

nrow(df1)? #返回他的行數(shù)

ncol(df1)? ? #返回他的列數(shù)

rownames(df1)? #返回行名,不允許有重復(fù)值

colnames(df1)? #返回列名

3.4數(shù)據(jù)框的取子集

提取列:df1$score

按坐標(biāo)

df1[2,2]? 一個(gè)單獨(dú)的數(shù)據(jù)df1[2,]? 第二行df1[,2]? 第二列df1[c(1,3),1:2]? 取第一行和第三行秒咨,第一列和第二列

解決報(bào)錯(cuò)的思維:

1.對(duì)比成功的代碼喇辽,數(shù)據(jù)與報(bào)錯(cuò)的代碼,數(shù)據(jù)之間的差別

2.讀懂error后面的字

按名字(可以實(shí)現(xiàn)一下取多列)

df1[,"gene"]? 按列名df1[,c('gene','change')]

按條件(邏輯值)

df1[df1$score>0,]

如何提取數(shù)據(jù)框的最后一列:df1[,ncol(df1)]

如何提取數(shù)據(jù)框除了最后一列以外的其他列:df1[,-ncol(df1)]

3.5數(shù)據(jù)框修改

#改一個(gè)格df1[3,3] <- 5df1#改一整列df1$score <- c(12,23,50,2)? df1

#新增一列df1$p.value <- c(0.01,0.02,0.07,0.05) df1

#改行名和列名rownames(df1) <- c("r1","r2","r3","r4")#只修改某一行/列的名colnames(df1)[2] <- "CHANGE"

3.6兩個(gè)數(shù)據(jù)框的連接

merge(test1,test2,by="name") name表示共同列的列名

merge(test1,test2,by.x=" ",by.y=" ")表示相同數(shù)據(jù)內(nèi)容不同列名的兩個(gè)表格的連接

利用R包中的dplyr的inner_join()函數(shù)也可以實(shí)現(xiàn)數(shù)據(jù)框的連接:x2=inner_join(dat,ids,by = "probe_id")

區(qū)別:inner是取交集的雨席,merge寫參數(shù)后可以有別的用處

3.7數(shù)據(jù)框按照邏輯值取子集

##按條件(邏輯值)

df1[df1$score>0,]

按行進(jìn)行取子集

矩陣

3.1矩陣新建和取子集

m <- matrix(1:9, nrow = 3)? #1-9組成矩陣菩咨,排除三行m[2,]? m[1,2] m[,1] m[2:3,1:2] #取子集

3.2矩陣的轉(zhuǎn)置和轉(zhuǎn)換

colnames(m) <- c("a","b","c") #加列名

#轉(zhuǎn)置:行變列,列變行 t(m)

#轉(zhuǎn)換為數(shù)據(jù)框:as.data.frame(m)

3.3矩陣畫熱圖

> m

? ? a b c

[1,] 1 4 7

[2,] 2 5 8

[3,] 3 6 9

pheatmap::pheatmap(m陡厘,cluster_cols=F,cluster_rows=F)

形成聚類樹:相似行和列會(huì)放在一起

列表

3.1列表新建和取子集

#新建

l <- list(m1 = matrix(1:9, nrow = 3),? ? ? ? ? m2 = matrix(2:9, nrow = 2))

l$m1[,1] [,2] [,3][1,]? ? 1? ? 4? ? 7[2,]? ? 2? ? 5? ? 8[3,]? ? 3? ? 6? ? 9

$m2? ? [,1] [,2] [,3] [,4][1,]? ? 2? ? 4? ? 6? ? 8[2,]? ? 3? ? 5? ? 7? ? 9

#取子集抽米,取了第二張表格,第二個(gè)元素

l[[2]]或者l$m2[,1] [,2] [,3] [,4][1,]? ? 2? ? 4? ? 6? ? 8[2,]? ? 3? ? 5? ? 7? ? 9

補(bǔ)充:元素的名字-names()

scores = c(100,59,73,95,45)names(scores) = c("jimmy","nicker","Damon","Sophie","tony")

scores jimmy nicker? Damon Sophie? tony? ? 100? ? 59? ? 73? ? 95? ? 45

scores["jimmy"]jimmy 100 scores[c("jimmy","nicker")] jimmy nicker 100? ? 59 names(scores)[scores>60][1] "jimmy"? "Damon"? "Sophie"

l[2]是list l[[2]]是一個(gè)matrix

刪除變量

刪除一個(gè):rm(l)

刪除多個(gè):rm(df1,m)

刪除全部:rm(list=ls())

清除控制臺(tái):ctrl+l

? Day4 函數(shù)和R包

4.1函數(shù)和參數(shù)

4.1.1形式參數(shù)與實(shí)際參數(shù)

seq(from=3,to=2,by=3)

函數(shù)? 形式參數(shù)糙置,熟練后可以忽略? 實(shí)際參數(shù)

4.1.2寫函數(shù)的函數(shù)

jimmy <- function(a,b,m = 2){? (a+b)^m}

function是創(chuàng)造函數(shù)的函數(shù)

jimmy(1,2)? 9

jimmy(3,6云茸,-2)? 0.01234568

4.2用函數(shù)替代復(fù)制粘貼

jimmy <- function(i){? plot(iris[,i],col=iris[,5])}

jimmy(1)

*當(dāng)代碼需要復(fù)制粘貼三次以上就應(yīng)該寫成循環(huán)或者函數(shù)

4.3默認(rèn)參數(shù)

沒寫的參數(shù)即為用了默認(rèn)值

4.4R包介紹

R包是什么:R包理解為多個(gè)函數(shù)的打包存放,包含數(shù)據(jù)谤饭、函數(shù)标捺、幫助文件和描述文件等。

R包的安裝:基于分析需求按需安裝揉抵。

R包在哪里:CRAN(install.packages())亡容、Bioconductor(BiocManager::install())、GitHub(devtools::install_github())加引號(hào)

R包如何安裝:如上

安裝后需要加載:library() 冤今、 require()一次安裝闺兢,每次打開新的窗口session都需要加載。不加引號(hào)

已經(jīng)安裝的包戏罢,可以用::快速調(diào)用里面的函數(shù) 包名::函數(shù)名? eg:pheatmap::pheatmap(volcano)

4.5R包的使用場(chǎng)景

學(xué)繪圖屋谭,用到ggplot2

(1)快速查看函數(shù)的幫助文檔sd( R包的名字 )

(2)去R包頁(yè)面搜索limma package

(3)browseVignettes運(yùn)行作者寫的網(wǎng)頁(yè)教程脚囊,前提是先加載這個(gè)包

(4)列出一個(gè)包里有哪些函數(shù)或者數(shù)據(jù):ls("package:stringr")

*文件名稱必須帶引號(hào),且在能識(shí)別文件名稱的函數(shù)括號(hào)里桐磁,實(shí)際參數(shù)的位置上

分情況討論

if(!require(stringr))install.packages("stringr")? ? #安裝好了require為TRUE悔耘,安裝失敗為FALSE

Day5 文件讀寫

5.1認(rèn)識(shí)csv格式

getwd()查看工作目錄

tab寫文件名稱

5.1.1 csv的打開方式

(1)默認(rèn)excel,雙擊

(2)用記事本打開

(3)sublime(適用大文件)

(4)R語(yǔ)言讀取所意,對(duì)數(shù)據(jù)框的修改不會(huì)同步到表格文件,數(shù)據(jù)框可以導(dǎo)出文件但不是文件

5.2認(rèn)識(shí)分隔符

常見的分隔符號(hào):逗號(hào)催首、空格扶踊、制表符\t

關(guān)于文件后綴

CSV=Comma Separated Values? 以逗號(hào)為分隔符的文件

TSV=Tab Separated Values? ? 以tab為分隔符的文件

純文本文件的后綴沒有意義,只是約定俗成郎任,起提示作用不起決定作用

5.3將表格文件讀入R語(yǔ)言秧耗,成為數(shù)據(jù)框

read.csv("")? 通常讀取csv格式

read.table("")通常讀取txt格式

#直接讀取失敗就需要指定參數(shù)

*如果想知道文件讀入后是什么數(shù)據(jù)結(jié)構(gòu),應(yīng)該輸入class(test),而不是輸入文件名稱舶治,輸入"ex3.csv"只會(huì)收到character的類型

5.4數(shù)據(jù)框的導(dǎo)出分井,成為表格文件

csv格式:write.csv()

讀取 >>編輯修改 >> 導(dǎo)出(不要覆蓋原文件,讓代碼可重復(fù)霉猛,數(shù)據(jù)可重現(xiàn))

5.5R特有的數(shù)據(jù)保存格式:Rdata

Rdata是文件尺锚,是R語(yǔ)言特有的數(shù)據(jù)存儲(chǔ)格式,保存的是變量惜浅,不是表格文件

save()保存? load() 加載

eg: save(test,file="example.Rdata")

? ? ? load("example.Rdata")

##獲取隔壁文件的Rdata文件

? ? ? (1)load("絕對(duì)路徑")

? ? ? (2)load("相對(duì)路徑")利用tab鍵補(bǔ)齊../

5.6實(shí)戰(zhàn)項(xiàng)目的組織方式

5.6.1歸類:輸出文件瘫辩,輸入文件,輸出圖片坛悉,保存到Rdata伐厌,腳本和Rmd文件,project文件等等

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 工作目錄下的文件夾:? ? ? ? ? ? 文件夾名/文件名

load隔壁文件夾的文件? ../? :上一級(jí)

#1.當(dāng)讀取文件ex1 <-read.table("ex1.txt")發(fā)現(xiàn)列名所在的格式不對(duì)時(shí)裸影,

應(yīng):ex1 <- read.table("ex1.txt",header = T)

#2.當(dāng)輸入命令ex2 <- read.csv("ex2.csv")發(fā)現(xiàn)行名未歸位挣轨,且特殊字符改變?yōu)辄c(diǎn)號(hào),

則ex2 <- read.csv("ex2.csv",row.names = 1,check.names = F)? 設(shè)置行名轩猩,且不要檢查列名

*數(shù)據(jù)框不允許重復(fù)的行名卷扮,解決方法:

1.先不加row.names參數(shù)讀進(jìn)來(lái)

2.處理第一列的重復(fù)值

3.將第一列設(shè)為行名

#3.讀取soft.txt發(fā)生串列

soft <- read.table("soft.txt"),發(fā)現(xiàn)最后一列是空著的因此會(huì)報(bào)錯(cuò)

如果采用soft <- read.table("soft.txt",header = T,fill = T) #其實(shí)不對(duì)均践,會(huì)發(fā)生串列

解決辦法:自行指定分隔符soft2 <- read.table("soft.txt",header = T,sep = "\t")

#4.將soft保存為Rdata并加載画饥。

save(soft,file = "soft.Rdata")rm(list = ls())? 把環(huán)境中的變量清空l(shuí)oad(file = "soft.Rdata")? 把Rdata文件出現(xiàn)在環(huán)境里

要經(jīng)常檢查數(shù)據(jù),查看數(shù)據(jù)類型W腔6陡省!

5.7fread函數(shù)如何使用

library(data.table)? #加載

a = fread("soft.txt",data.table=F)? ? ? ####fread函數(shù)沒有設(shè)置行名的參數(shù)

library(rio)

export(a,file="a.xlsx")

b=list(iris = iris, a = a )

export(b,file = "b.xlsx")

###把列表直接導(dǎo)出來(lái)xlsx

import_list? >>直接讀出列表

Day6作圖

6.1常用可視化R包和函數(shù)

作圖:base ggplot2? ggpubr

拼圖:par里的mfrow? grid.arrange? cowplot? customLayout? patchwork

導(dǎo)出:經(jīng)典三段論? ggsave? eoffice>>topptx

6.2基礎(chǔ)包——繪圖函數(shù)

6.3ggplot2語(yǔ)法

#1.入門級(jí)繪圖模板:作圖數(shù)據(jù)葫慎,橫縱坐標(biāo)

ggplot(data = iris)+? #data放數(shù)據(jù)框? geom_point(mapping = aes(x = Sepal.Length,? ? ? ? ? ? ? ? ? ? ? ? ? y = Petal.Length))

**ggplot2特殊語(yǔ)法:列名不帶引號(hào)衔彻,行末寫加號(hào)

#2.屬性設(shè)置(顏色薇宠、大小、透明度艰额、點(diǎn)的形狀澄港,線型等)

#2.1 手動(dòng)設(shè)置,需要設(shè)置為有意義的值

ggplot(data = iris) +? geom_point(mapping = aes(x = Sepal.Length,? ? ? ? ? ? ? ? ? ? ? ? ? y = Petal.Length),? ? ? ? ? ? ? color = "blue")? ? color在geom_point的參數(shù)

ggplot(data = iris) +? geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length),? ? ? ? ? ? ? size = 5,? ? # 點(diǎn)的大小5mm? ? ? ? ? ? alpha = 0.5,? # 透明度 50%? ? ? ? ? ? shape = 8)? # 點(diǎn)的形狀:數(shù)字標(biāo)號(hào)表示

#2.2 映射:按照數(shù)據(jù)框的某一列來(lái)定義圖的某個(gè)屬性ggplot(data = iris)+? geom_point(mapping = aes(x = Sepal.Length,? ? ? ? ? ? ? ? ? ? ? ? ? y = Petal.Length,? ? ? ? ? ? ? ? ? ? ? ? ? color = Species))? color屬于aes參數(shù)柄沮,是列名

## 自行指定映射的具體顏色回梧?

ggplot(data = iris)+? geom_point(mapping = aes(x = Sepal.Length,? ? ? ? ? ? ? ? ? ? ? ? ? y = Petal.Length,? ? ? ? ? ? ? ? ? ? ? ? ? color = Species))+? scale_color_manual(values = c("blue","grey","red"))? ? ###color和species內(nèi)的種類是配套出現(xiàn)的

scale_shape_manual(values=c( ))

## 區(qū)分color和fill兩個(gè)屬性

Q2-1 空心形狀和實(shí)心形狀都用color設(shè)置顏色

ggplot(data = iris)+? geom_point(mapping = aes(x = Sepal.Length,? ? ? ? ? ? ? ? ? ? ? ? ? y = Petal.Length,? ? ? ? ? ? ? ? ? ? ? ? ? color = Species),? ? ? ? ? ? shape = 17) #17號(hào),實(shí)心的例子

ggplot(data = iris)+? geom_point(mapping = aes(x = Sepal.Length,? ? ? ? ? ? ? ? ? ? ? ? ? y = Petal.Length,? ? ? ? ? ? ? ? ? ? ? ? ? color = Species),? ##color是管邊框的? ? ? ? ? ? shape = 2) #2號(hào)祖搓,空心的例子

Q2-2 既有邊框又有內(nèi)心的狱意,才需要color和fill兩個(gè)參數(shù)

ggplot(data = iris)+? geom_point(mapping = aes(x = Sepal.Length,? ? ? ? ? ? ? ? ? ? ? ? ? y = Petal.Length,? ? ? ? ? ? ? ? ? ? ? ? ? color = Species),? ? ? ? ? ? shape = 24,? ? ? ? ? ? fill = "black") #24號(hào),雙色的例子

#3.分面:把一張圖分成多張子圖

#單分面

ggplot(data = iris) +? geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) +? facet_wrap(~ Species)? ##按照species拆分分成spacies個(gè)子圖

#雙分面

dat = iris? #把iris內(nèi)容創(chuàng)給datdat$Group = sample(letters[1:5],150,replace = T)? #新增一列? sample是隨機(jī)抽樣拯欧,樣本數(shù)量比總體大的話要使replace=Tggplot(data = dat) +? geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length)) +? facet_grid(Group ~ Species)? ##按照group详囤,species兩列分

**文件名只會(huì)出現(xiàn)在將文件導(dǎo)入R語(yǔ)言的那一刻

#4幾何對(duì)象

#幾何對(duì)象可以疊加

局部:僅對(duì)當(dāng)前圖層有效:原代碼:gg

plot(data = iris) +? geom_smooth(mapping = aes(x = Sepal.Length,? ? ? ? ? ? ? ? ? ? ? ? ? y = Petal.Length))+? geom_point(mapping = aes(x = Sepal.Length,? ? ? ? ? ? ? ? ? ? ? ? ? ? y = Petal.Length))

全局:對(duì)所有圖層有效:簡(jiǎn)化后的代碼:ggplot(data = iris,mapping = aes(x = Sepal.Length, y = Petal.Length))+? geom_smooth()+? geom_point()

#5統(tǒng)計(jì)變換

統(tǒng)計(jì)變換-直方圖View(diamonds)table(diamonds$cut)

ggplot(data = diamonds) +? geom_bar(mapping = aes(x = cut))? ##y是自己算,數(shù)量? geom bar镐作,條形圖

ggplot(data = diamonds) +? stat_count(mapping = aes(x = cut))? ##statcount 另外一個(gè)角度的畫圖函數(shù)


y=..prop..也可以寫成y=after_stat(prop),group=1是把全部的柱子看做整體計(jì)算它的百分比

#6位置關(guān)系

##6.1抖動(dòng)的點(diǎn)圖ggplot(data = iris,mapping = aes(x = Species,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? y = Sepal.Width,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fill = Species)) +? geom_boxplot()+? geom_point()

ggplot(data = iris,mapping = aes(x = Species,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? y = Sepal.Width,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fill = Species)) +? geom_boxplot()+? geom_jitter()

##堆疊直方圖

ggplot(data = diamonds) +? geom_bar(mapping = aes(x = cut,fill=clarity))? ? ##用兩列

ggplot(data = diamonds) +? geom_bar(mapping = aes(x = cut,fill=clarity),position="dodge")

position="fill"? >>設(shè)成比例

#7坐標(biāo)系

#翻轉(zhuǎn)coord_flip()

ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +? geom_boxplot() +? coord_flip()#極坐標(biāo)系coord_polar()bar <- ggplot(data = diamonds) +? geom_bar(? ? mapping = aes(x = cut, fill = cut),? ? width = 1? ) +? theme(aspect.ratio = 1) +? labs(x = NULL, y = NULL)barbar + coord_flip()bar + coord_polar()

完整繪圖模板

ggplot(data=<DATA>)+? ##畫圖數(shù)據(jù)

<GEOM_FUNCATION>##畫圖函數(shù)(mapping=aes(MAPPINGs)##映射,stat=<STAT>##統(tǒng)計(jì)變換時(shí),position=<POSITION>)+? ##位置關(guān)系

<COORDINATE_FUNCTION>+? ###坐標(biāo)系

<FACET_FUNCTION> ###分面

6.3ggpubr? 代碼直接搜

##ggpubr的列名是需要加引號(hào)的

p <- ggboxplot(iris, x = "Species",? ? ? ? ? ? ? ? y = "Sepal.Length",? ? ? ? ? ? ? color = "Species",? ? ? ? ? ? ? ? shape = "Species",? ? ? ? ? ? ? add = "jitter")? ? ? ? ? ? ? ? #畫箱線圖的函數(shù)my_comparisons <- list( c("setosa", "versicolor"),? ? ? ? ? ? ? ? ? ? ? ? c("setosa", "virginica"),? ? ? ? ? ? ? ? ? ? ? ? c("versicolor", "virginica") )? ? ? ? ? #組間比較藏姐,由于本例有很多組價(jià)比較,因此將他們組成一個(gè)列表傳遞給一個(gè)參數(shù)comparisons该贾,等號(hào)前是參數(shù)名稱羔杨,等號(hào)后是參數(shù)的值p + stat_compare_means(comparisons = my_comparisons)+? stat_compare_means(label.y = 9)? ? ? ? ? ## Add pairwise comparisons p-value,把總體比較的p值添加到圖上

6.4圖片的保存

ggplo2系列:ggsave("iris_box_ggpubr.png")

? ? ? ? ? ? ? ? ? ? ? ggsave(p,filename="iris_box_ggpubr2.png")

通用:三段論 (保存的格式及文件名稱:pdf("test.pdf"),作圖代碼,畫完了杨蛋,關(guān)閉畫板(dev.off()))

eg:#1.基礎(chǔ)包作圖的保存pdf("iris_box_ggpubr.pdf")boxplot(iris[,1]~iris[,5])text(6.5,4, labels = 'hello')dev.off()? ? #代碼可運(yùn)行卻不出圖问畅,因?yàn)楫嫲灞徽加枚啻芜\(yùn)行到null device()為止

**eoffice[可以把圖片導(dǎo)出成ppt]:超多點(diǎn)的熱圖不適用,ppt會(huì)卡住

library(eoffice)

topptx(p,"iris_box_ggppubr.pptx")

#拼圖

R包patchwork:支持直接p1+p2拼圖

6.5找現(xiàn)成的代碼

STHDA

1.看別人的圖怎么做的

Day7 R語(yǔ)言綜合運(yùn)用

7.1玩轉(zhuǎn)字符串

加載stringr包:library(stringr)

1.str_length( )

x <- "The birch canoe slid on the smooth planks."

x###1.檢測(cè)字符串長(zhǎng)度str_length(x)? #有多少字符串length(x)? #計(jì)算向量的長(zhǎng)度六荒,即有多少引號(hào)

2.str_split( )字符串拆分

str_split(x," ")? #返回出的結(jié)果是個(gè)列表x2 = str_split(x," ")[[1]];x2

y = c("jimmy 150","nicker 140","tony 152")str_split(y," ")str_split(y," ",simplify = T)

`y = c("jimmy 150","nicker 140","tony 152")? #y是個(gè)長(zhǎng)度為3的向量str_split(y," ")[[1]][1] "jimmy" "150"?

? ? [[2]]? ? [1] "nicker" "140"?

? [[3]]? [1] "tony" "152"

str_split(y," ",simplify = T)? #把數(shù)據(jù)簡(jiǎn)化成矩陣[,1]? ? [,2] [1,] "jimmy"? "150"[2,] "nicker" "140"`[3,] "tony"? "152"``

3.str_sub( )按位置提取字符串

str_sub(x,5,9)? #截取5-9的字符

4.str_detect( )字符檢測(cè)

str_detect(x2,"h")? #返回與x2等長(zhǎng)且一一對(duì)應(yīng)的邏輯值向量护姆,判斷字符串中是否含有關(guān)鍵值

str_starts(x2,"T") #是否以T開頭

str_ends(x2,"e") #是否以e結(jié)尾返回邏輯值

5.字符串的替換

str_replace(x2,"o","A")#把o換成A ,但只替換第一次匹配到的str_replace_all(x2,"o","A")? #把o換成A掏击,所有都替換

6.字符刪除

str_remove(x," ") #只去掉第一個(gè)空格str_remove_all(x," ") #刪除全部的空格

7.大寫變小寫:str_to_lower()

7.2數(shù)據(jù)框排序

加載R包dplyr:library(dplyr)

1.arrange( )

arrange卵皂,更加靈活的排序,默認(rèn)從小到大排序

library(dplyr)arrange(test, Sepal.Length)arrange(test, desc(Sepal.Length))#修改默認(rèn)參數(shù)為按照Sepal.Length從大到小排序arrange(test, desc(Sepal.Width),Sepal.Length)

2.distinc( )去重復(fù)

distinct(test,,Species,.keep_all=T)? #重復(fù)到只出現(xiàn)一次,.keep_all=T即為展示完全列

3.mutate( ):新增一列數(shù)據(jù)框

mutate(test,new=Sepal.Length * Sepal.Width)? #新增一列new的數(shù)據(jù)框砚亭,內(nèi)容是Sepal.Length * Sepal.Width

***但是運(yùn)行該行代碼后灯变,test數(shù)據(jù)仍然不變,因?yàn)闆]有賦值捅膘,沒有賦值就等于沒發(fā)生過

4.order( ) :order 可以給向量排序添祸,也可以給數(shù)據(jù)框排序

sort(test$Sepal.Length)test$Sepal.Length[order(test$Sepal.Length)] #只顯示一列

test[order(test$Sepal.Length),]? #顯示全部,且從小到大test[order(test$Sepal.Length,decreasing = T),] #顯示全部寻仗,且從大到小

5.補(bǔ)充:select( ),filter( )篩選列刃泌,行

6.連續(xù)的步驟

x1=select(iris,-5) #去掉iris的第五列

x2=as.matrix(x1)

x3=head(x2,50)#取x2的前50行

pheatmap::pheatmap(x3)

嵌套方法優(yōu)化代碼:(由里到外寫)

pheatmap::pheatmap(head(as.matrix(select(iris,-5)),50))

管道符 %>%優(yōu)化代碼:將代碼直接往下傳遞? 快捷鍵:crtl+shift+m

優(yōu)點(diǎn):易讀,不產(chǎn)生中間變量

iris%>%

select(-5)%>%

as.matrix()%>%

head(50)%>%

pheatmap::pheatmap( )

優(yōu)秀題目:

3.加載deg.Rdata,根據(jù)a、b兩列的值耙替,按照以下條件生成向量x:

#a< -1 且b<0.05,則x對(duì)應(yīng)的值為down亚侠;#a>1 且b<0.05,則x對(duì)應(yīng)的值為up;#其他情況俗扇,x對(duì)應(yīng)的值為no

統(tǒng)計(jì)up硝烂、down、no各重復(fù)了多少次

load("deg.Rdata")k1 = deg$a< -1 & deg$b<0.05;table(k1)k2 = deg$a>1 & deg$b<0.05;table(k2)x = ifelse(k1,"down",ifelse(k2,"up","no"))

7.3條件與循環(huán)

1條件語(yǔ)句

(1)if(一個(gè)邏輯值){ }

只有邏輯值是true才會(huì)運(yùn)行

插播:長(zhǎng)腳本管理方式

1.if(F)铜幽,{...},則{}里的代碼被跳過(保留但不反復(fù)運(yùn)行的代碼)滞谢,反之則會(huì)被運(yùn)行,凡是帶有{}的代碼均可以被折疊

2.分成多個(gè)腳本除抛,每個(gè)腳本最后保存Rdata狮杨,下一個(gè)腳本開頭清空在加載:rm(list=ls())? load("")

(2)if( ){ }else{ }

i =1if (i>0){? print('+')} else {? print("-")}

重點(diǎn):ifelse函數(shù) ifelse(x,yes,no)

x:邏輯值或邏輯值向量

yes:T的返回值;no:F的返回值

ifelse(i>0,"+","-")

x=rnorm(3)ifelse(x>0,"+","-")

ifelse()+str_detect()

samples=c("t1","t2","t3","n1","n2","n3")

k1=str_detect(samples,"t");k1? ? [1] T T T F F F

ifelse(k1,"t","n")? ? [1]? "t" "t" "t" "n" "n" "n"

(3)多個(gè)條件

i = 0if (i>0){? print('+')} else if (i==0) {? print('0')} else if (i< 0){? print('-')}

ifelse(i>0,"+",ifelse(i<0,"-","0"))

2for循環(huán)

對(duì)x里的每個(gè)元素i進(jìn)行同一操作:for(i in x){CODE}

批量作圖

par(mfrow=c(2,2)) #把畫板分成兩行兩列

for(i in 1:4){plot(iris[,1],col=iris[,5])}

批量裝包

pks=c("tidyr","dplyr",'stringr")? #pks就是一個(gè)普通向量

for(g in pks){

if(!require(g,character.only =T))#避免歧義镶殷,識(shí)別包里的內(nèi)容

install.packages(g,ask=F,update=F)}

7.4隱式循環(huán)

矩陣/數(shù)據(jù)框的隱式循環(huán)——apply禾酱,返回結(jié)果是向量

apply(X,MARGIN,FUN...)

X是矩陣/數(shù)據(jù)框名字

MARGIN為1表示行微酬,為2表示列

FUN是函數(shù)

對(duì)X的每一行/列進(jìn)行FUN這個(gè)函數(shù)

批量畫圖

par(mfrow=c(2,2))

apply(iris[,1:4],2,plot,col=iris[,5])? ##如果有寫不下的參數(shù)绘趋,繼續(xù)寫在apply的括號(hào)里

三種方法:

1:load("test2.Rdata")m=apply(test, 1, var)names=tail(sort(m),1000)

2:load("test2.Rdata")

a=names(tail(sort(apply(test,1,var)),1000))3:b=test%>%? apply(1,var)%>%? sort()%>%? tail(1000)%>%? names()

identical(a,b)

向量/列表的隱式循環(huán)——lapply

lapply(list,FUN,...) #對(duì)列表、向量中的每個(gè)元素實(shí)施相同的操作

#返回值是列表颗管,對(duì)列表中的每個(gè)元素(向量)求均值(試試方差var,分位數(shù)quantile)

lapply(test,mean)lapply(test,fivenum)

lapply(1:4,rnorm)? #1234分別進(jìn)行rnorm

批量畫圖

lapply(1:4,function(i)){

plot(iris[,i],col=iris[,5])}

批量裝包

pks=c("tidyr","dplyr",'stringr")`? #pks就是一個(gè)普通向量

qa=function(g{

if(!require(g,character.only =T))`#避免歧義陷遮,識(shí)別包里的內(nèi)容

? ? `install.packages(g,ask=F,update=F)}

lapply(pks,qa)

7.5數(shù)據(jù)框的連接

##inner_join:取交集

##left_join:左連接

##right_join:右連接

##full_join:全連接

7.6表達(dá)矩陣畫箱線圖

將表達(dá)矩陣改成數(shù)據(jù)框——轉(zhuǎn)置

把行名變成新數(shù)據(jù)的一列

寬變長(zhǎng)

表達(dá)矩陣

set.seed(10086)? #抽到的一組隨機(jī)數(shù)字,讓隨機(jī)的成果變得可以固定下來(lái)

exp = matrix(rnorm(18),ncol = 6)? #把這十八個(gè)數(shù)字排列成六列

exp = round(exp,2)? # 四舍五入垦江,保留小數(shù)點(diǎn)后兩位rownames(exp) = paste0("gene",1:3)? #給表達(dá)矩陣加行名colnames(exp) = paste0("test",1:6)? #給表達(dá)矩陣加列名exp[,1:3] = exp[,1:3]+1? #讓前三列和后三列有區(qū)別帽馋,得到前三列比后三列大的表達(dá)矩陣exp

library(tidyr)library(tibble)library(dplyr)dat = t(exp) %>%? #轉(zhuǎn)置? as.data.frame() %>%? #變數(shù)據(jù)框? rownames_to_column() %>%? #行名變成一列? mutate(group = rep(c("control","treat"),each = 3))? #在dat上新增一列名為group,內(nèi)容為3個(gè)control和3個(gè)treat

pdat = dat%>% #處理表達(dá)矩陣? pivot_longer(cols = starts_with("gene"), #寬變長(zhǎng)比吭,把列給合并绽族,給予列名,原本寬下的數(shù)字變成一列叫count? ? ? ? ? ? ? names_to = "gene",? ? ? ? ? ? ? values_to = "count")

library(ggplot2)p = ggplot(pdat,aes(gene,count))+? geom_boxplot(aes(fill = group))+? theme_bw()pp + facet_wrap(~gene,scales = "free")? #分面:三個(gè)基因分成三張子圖

一些頂呱呱的函數(shù)

match()? #用于在向量中查找某個(gè)值衩藤,并返回該值在向量中第一次出現(xiàn)的位置吧慢。

dir()? #用于列出指定目錄中的文件和子目錄的名稱。

file.create()? #用于創(chuàng)建一個(gè)或多個(gè)空文件赏表。

file.exists()? #用于檢查指定的文件是否存在检诗。

file.remove()? #用于刪除指定的文件。

重點(diǎn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瓢剿,一起剝皮案震驚了整個(gè)濱河市逢慌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌间狂,老刑警劉巖攻泼,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡坠韩,警方通過查閱死者的電腦和手機(jī)距潘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)只搁,“玉大人音比,你說我怎么就攤上這事∏馔铮” “怎么了洞翩?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)焰望。 經(jīng)常有香客問我骚亿,道長(zhǎng),這世上最難降的妖魔是什么熊赖? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任来屠,我火速辦了婚禮,結(jié)果婚禮上震鹉,老公的妹妹穿的比我還像新娘俱笛。我一直安慰自己,他們只是感情好传趾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布迎膜。 她就那樣靜靜地躺著,像睡著了一般浆兰。 火紅的嫁衣襯著肌膚如雪磕仅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天簸呈,我揣著相機(jī)與錄音榕订,去河邊找鬼。 笑死蜕便,一個(gè)胖子當(dāng)著我的面吹牛劫恒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播玩裙,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼兼贸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了吃溅?” 一聲冷哼從身側(cè)響起溶诞,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎决侈,沒想到半個(gè)月后螺垢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喧务,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年枉圃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了功茴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡孽亲,死狀恐怖坎穿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情返劲,我是刑警寧澤玲昧,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站篮绿,受9級(jí)特大地震影響孵延,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜亲配,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一尘应、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吼虎,春花似錦犬钢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)通铲。三九已至,卻和暖如春贮折,著一層夾襖步出監(jiān)牢的瞬間遍坟,已是汗流浹背拳亿。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留愿伴,地道東北人肺魁。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像隔节,于是被迫代替她去往敵國(guó)和親鹅经。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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