萬地高樓平地起,掌握基本的代碼規(guī)律和邏輯思維非常重要
每個基本的代碼和函數(shù)不運行是200次以上岸啡,是談不上掌握的
基本開始運行代碼
rm(list=ls())
options(stringsAsFactors = F)
tips
Tab鍵匹配補全
head(b)取b的前6行,同樣有tail()取末6行
基本數(shù)據(jù)類型
R 有四種基本數(shù)據(jù)類型赫编,即數(shù)值型(numeric)巡蘸、復數(shù)型(complex)、邏輯型(logical)擂送、字符型(character)悦荒,因子(factor)。
numeric:就是數(shù)字【需要注意的是有的雖然看起來是數(shù)字嘹吨,但是被定義成了character或者factor,需要用as.numeric轉(zhuǎn)換】
character:用單引號或者雙引號包括起來的字符序列搬味,一般我們稱之為字符串。
logical:邏輯型變量蟀拷,即布爾值碰纬,表示“是”與“否”,“真”或“假”问芬。
邏輯型用 TRUE 表示真悦析,F(xiàn)ALSE 表示假。也可縮寫為 T或者 F此衅,
但需要注意的是,T 和 F不是 R 的保留字强戴,其含義可以被程序改變亭螟,因此最好是用 TRUE 和 FALSE,更加規(guī)范和安全骑歹。
R中的比較運算和邏輯運算都可以產(chǎn)生邏輯型數(shù)據(jù)预烙。比較運算包括 >,<道媚,>=扁掸,<=,==衰琐,!=(大于也糊,小于,大于等于羡宙,小于等于狸剃,等于,不等于)狗热。
邏輯運算包括 &钞馁,|,!(與匿刮、或僧凰、非)。
> 2>3
[1] FALSE
> a=seq(1,20)
> 8>a
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[17] FALSE FALSE FALSE FALSE
factor:應(yīng)該是最難理解的一個變量類型
在R語言中熟丸,因子(factor)可以表示的是一個符號训措、一個編號或者一個等級,即光羞,一個點绩鸣。例如,人的個數(shù)可以是1纱兑,2呀闻,3,4......那么因子就包括潜慎,1捡多,2,3铐炫,4.....
還有統(tǒng)計量的水平的時候用到的高垒手、中、低倒信,也是因子淫奔,因為他是一個點。
與之區(qū)別的向量堤结,是一個連續(xù)性的值唆迁,例如鸭丛,數(shù)值中有1,1.1唐责,1.2......可以作為數(shù)值來計算鳞溉,而因子則不可以。
sex<-c("M","F","M","M","F")
factor(sex)
sex.factor<-as.factor(sex)
#使用levels來取得因子中的水平
levels(sex.factor)
# [1] "F" "M"
不太好理解鼠哥,新手剛開始不太用的上熟菲,我現(xiàn)在也不太理解factor,應(yīng)該是比character多了半個維度的感覺
基本數(shù)據(jù)結(jié)構(gòu)
無論是數(shù)值型(numeric)、邏輯型(logical)朴恳、字符型(character)抄罕,因子(factor)變量都需要用容易來存儲,也就是數(shù)據(jù)結(jié)構(gòu)
R的對象由幾種基本數(shù)據(jù)類型構(gòu)成:
向量(vector) :一維空間
矩陣(matrix):二維空間于颖,只可以存儲數(shù)值變量呆贿,但是較少用到,
數(shù)據(jù)框(dataframe):二維空間森渐,可以存儲numeric做入,logical,character同衣,factor型變量竟块,在實際分析工作中用到的最多
數(shù)組(array):三維空間,但是極少用到耐齐,可以忽略
列表(list):三維空間浪秘,可以由多個vactor/matrix/dataframe組成
基本計算
R中可以直接進行基本計算
【每一個英文單詞都是一個函數(shù)】
【基本所有的計算符號都可以在R中進行直接計算】
6+6
6-6
6*6
6/6
6^2
log(6)
mean()
max()
min(x)
創(chuàng)建向量
c( ) 是我們常用來創(chuàng)建向量的函數(shù),c就是create埠况,也可以理解為combind
c("TP53","ERBB2","BRCA1")
c(2,3,4)
c(2:9)
seq(1,3)#默認為整數(shù)1
seq(1,3,by=0.5)
a=c(3,4,5,6,7,8),等價于a=3:8或者a=c(3:8)或者a=seq(3,8)
【R中沒有唯一的解決代碼方案秫逝,條條大路通羅馬,找出規(guī)律询枚,構(gòu)建個人的思維習慣才是王道】
rep就是replicate重復的意思
rep(1,3)# 【1重復3次】
rep(1:2,3) #【1和2,重復3次】
rep("TP53",3)# 【TP53, 重復3次】
rep(c("TP53","ERBB2","BRCA1"),each=3)#【每個向量重復3次】
rep(c("TP53","ERBB2","BRCA1"),3)#【 重復3次】
seq就是sequence序列
seq(1,3)#默認為整數(shù)1 返回值為1,2,3
seq(1,3,by=0.5) by是設(shè)定間隔值浙巫,返回值為1, 1.5, 2, 2.5, 3
sort(a)#排序
rev(a)#反向排序
table(a)###每個變量的counts
unique(a)####顯示變量唯一的數(shù)目
sort(a)#排序
sort(a,decreasing = TRUE) #降序排序
order()得到排列的小標用金蜀,返回的是每個變量在一維向量中的排序位置編號
每個函數(shù)都有很多啞變量可以微調(diào)整,參考help文檔說明的畴,或者TAB鍵聯(lián)想渊抄,每個調(diào)整參數(shù)之間以,分割
判斷向量類型
在預(yù)算中如果報錯丧裁,那就需要check元素類型是否不支持护桦,as.xxxx函數(shù)可以幫助把數(shù)據(jù)變成指定類型或狀況。
class()查看數(shù)據(jù)類型
str()查看數(shù)據(jù)結(jié)構(gòu)
dim()查看數(shù)據(jù)維度
is.data.frame()返回TRUE or FALSE邏輯向量
as.character()可以幫助把數(shù)據(jù)變成字符型數(shù)據(jù)(加雙引號“”的變量)
構(gòu)建matrix
a<-matrix(1:20,nrow = 4,ncol =5 )
a<-matrix(1:20, 4,5 )
a<-matrix(1:20, 4)
#三者等同
構(gòu)建data.frame
a<-data.frame(a=seq(1,5),b=seq(6,10))
data.frame的行和列數(shù)目必須一致煎娇,并且行名不能重復二庵,列名可以重復
提取數(shù)據(jù)
對于向量贪染,由于是一維結(jié)構(gòu),可以直接a[3],取向量中第3個數(shù)值
對于矩陣和數(shù)據(jù)框催享,由于是二維結(jié)構(gòu)杭隙,需要指定二位結(jié)構(gòu)
a[2,3]取數(shù)據(jù)框中的第2行、第三列的數(shù)值
data.frame默認是列為單位
可以對列進行直接操作
例如a是數(shù)據(jù)框變量
mean(a[,1])因妙、mean(a$1) 可以直接求a的第一列的均值
但是mean(a[1,])卻不可以直接求a的某一行的均值
需要先轉(zhuǎn)換后在計算
mean(as.numeric(a[1,]))
如果添加行痰憎,則將改變所有的列。如果重新賦值攀涵,可以將a改成數(shù)據(jù)框類型铣耘。如果沒有重新賦值,則不改變a的類型以故。依次類推蜗细,還有as.xxx等系列函數(shù)
對list進行操作
list是三維結(jié)構(gòu),所以需要進行三維定位
例如a是list變量
a[1]則得到列表中的第一個列表,進行一次降維
a[[1]] 得到第一元素据德,進行了二次降維
有時候兩種方法得到的結(jié)果看起來是一樣的鳄乏,可是使用class查看數(shù)據(jù)類型后發(fā)現(xiàn),其實[[]]之后已經(jīng)對數(shù)據(jù)進行了二次降級棘利,變成了元素橱野。
數(shù)據(jù)框取索引
通常我們想提取數(shù)據(jù)框中的指定行或者指定列
一般有兩種簡單提取思維
1)提取目標變量所在下標值(可以理解為坐標,例如第幾行)
舉例
a<-data.frame(sample=rep(c("tumor","sample"),4),age=seq(1:8))
要求1善玫,提取sample為tumor的數(shù)據(jù)
我可以找到sample列=tumor的行號
b<-a$sample=="tumor"
注意==是邏輯判斷符號水援,所以返回的是邏輯性變量
然后直接導入編輯變量
tumorsample<-a[b,]
也可以一步代碼
tumorsample<-a[a$sample=='tumor',]
a<-seq(1,100)
a>2 #返回的是邏輯變量
a[a>2]#返回的是向量變量,自動過濾掉FALSE變量
體會下不同
文件讀取和保存
read.table('文件名', header = T,sep = '\t' )
read.csv('文件名', header = T )
write.table(a,file = "aa")
write.csv (a,file = "aa")
重命名
重命名行名
rownames(b)<-
colname(b)<-
尚不完善茅郎,持續(xù)更新ing
感謝jimmy和他的生信菜鳥團家族