c本身在這里應(yīng)該是“combine”的首字母,用于合并一系列數(shù)字從而形成向量/數(shù)列。
企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對外擴(kuò)展宣傳的重要窗口,一個(gè)合格的網(wǎng)站不僅僅能為公司帶來巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺,創(chuàng)新互聯(lián)建站面向各種領(lǐng)域:成都報(bào)廢汽車回收等成都網(wǎng)站設(shè)計(jì)、營銷型網(wǎng)站建設(shè)解決方案、網(wǎng)站設(shè)計(jì)等建站排名服務(wù)。
R語言數(shù)據(jù)結(jié)構(gòu)主要有以下四種:
向量:一串相同類型的數(shù)據(jù),不限于數(shù)字,字符,邏輯都可以,單獨(dú)拿出來的一列。什么是看做一個(gè)整體,一個(gè)向量里有若干個(gè)數(shù)據(jù),它們組成一個(gè)整體之后,可以擁有一個(gè)共同的名字。
以下主要講向量:
向量就是一串?dāng)?shù)據(jù),串聯(lián)在一起,組成一個(gè)整體,向量由元素組成。
很長的向量要么從數(shù)據(jù)框提取一列,或是有規(guī)律地生成,如連續(xù)的數(shù)據(jù):
paste0函數(shù)連接兩個(gè)向量,逗號 , 前后各有一個(gè)向量,如字符型和數(shù)值型向量。
paste0和paste的區(qū)別是:
paste0函數(shù) 把兩個(gè)向量的元素一一對應(yīng)進(jìn)行 無縫 連接,而 paste函數(shù) 把兩個(gè)向量的元素一一對應(yīng)進(jìn)行 空格 連接。paste函數(shù)有默認(rèn)值為空格,在空格處把空格去掉sep=""引號里把默認(rèn)的空格去掉,即什么沒有,就變成無縫連接,也可以用其它的符號連接sep="/",sep="_"等。
數(shù)值型、字符型、邏輯型:只要有字符型在,用c()生成向量為字符型。只有邏輯型和數(shù)值型,用c()生成向量為數(shù)值型。
c()函數(shù)生成向量時(shí),要求為生成同一種數(shù)據(jù)類型
注意的地方:
變量名 :c()為生成向量函數(shù),一般除字母c外,取單個(gè)字母或是單詞及縮寫,組成變量名的字母之間不要有空格,不能以數(shù)字為變量名或是以數(shù)字開頭,變量名不能是中文名,特殊符號等。
- 與c()函數(shù)之間沒有空格。
- 的快捷鍵輸入:
mac電腦: option 和 - ;
windows電腦: Alt 和 -
= 在任何情況下可替代 - ,但是 = 除了賦值,還有其它用法,比如函數(shù)里參數(shù)用法。 - 不能在任意情況下代替 = 。
強(qiáng)大的計(jì)算是體現(xiàn)在批量計(jì)算上,先把一些數(shù)據(jù)組成一個(gè)整體,
還是以向量x為單位進(jìn)行
其中五個(gè)重要函數(shù),一定要掌握。
能用函數(shù)代替的東西,堅(jiān)決不用手和眼睛去數(shù),比如length()統(tǒng)計(jì)向量元素個(gè)數(shù)。
結(jié)論:unique(x)與x[!duplicated(x)]函數(shù)相同
用identical()可以判斷兩個(gè)函數(shù)是否相同(數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)類型是否完全相同)
重點(diǎn)和難點(diǎn):
x==y :x和對應(yīng)位置的y相等嗎?(x和y里的元素,按順序一一對應(yīng)比較,講究位置對應(yīng),兩者里第一個(gè)元素相同就返TRUE,比較完兩個(gè)向量的第一位置上的元素,接著比較兩個(gè)向量第二個(gè)位置元素...到兩個(gè)向量最后)。
x和y不一樣長:理解“循環(huán)補(bǔ)齊”
結(jié)論: 如果x與y的向量元素長度不相等,以長度向量說了算,不是由在==前的向量決定。
x%in%y :x的每個(gè)元素在y中存在嗎?(x的元素挨個(gè)到y(tǒng)里和所有元素比較,在y里有的相同的返回TRUE,不講究位置,有就是TRUE,沒有為FALSE)。比如y向量加了一個(gè)元素2,返回還是9個(gè)邏輯值,返回的邏輯值是與x一一對應(yīng),和y沒有關(guān)系。
加減乘除,兩個(gè)向量直接可以進(jìn)行,等位運(yùn)算。前提是兩個(gè)向量必須等長,即元素個(gè)數(shù)一樣。
用paste0或是paste連接兩個(gè)向量,兩個(gè)向量的長度(元素個(gè)數(shù))不一致,循環(huán)補(bǔ)齊。
intersect(x,y),union(x,y),setdiff(x,y),setdiff(y,x),x與y順序顛倒(setdiff()與%in%有點(diǎn)兒相似)。
[] :取子集符號,將TRUE對應(yīng)的值挑選出來,F(xiàn)ALSE丟棄.
例:在13個(gè)數(shù)中,取出大于7的數(shù),首先把13個(gè)數(shù)值組成一個(gè)向量x,x7返回是邏輯值。
取值子集的對象放在中括號的外面,取子集的邏輯值向量放在中括號里面。
單獨(dú)運(yùn)行中括號里的向量,中括號里各種條件的返回結(jié)果有共同的規(guī)律,是一個(gè)與x等長的邏輯值向量。
下標(biāo):代表在哪個(gè)位置上。
符號 : []
按照邏輯值: 中括號里是與x等長的邏輯值向量
按照位置: 中括號里是由x的下標(biāo)組成的向量(支持反選)
思考:從13個(gè)彩色(綠,藍(lán),黃)球中,選出屬于藍(lán)色和綠色的:
使用x %in% y還是x ==y,用x %in% y,不是等位循環(huán)補(bǔ)齊運(yùn)算,%in%比較靈活,可以在很多場景中使用,如3選2,50選2,50選20等。
13個(gè)球的顏色賦值給向量x,藍(lán)色和綠色賦值給y。
x %in% y
x[x %in% y]
修改向量的元素,修改x里的第四個(gè)元素
注意:R于語言里所有的修改,都要賦值,沒有賦值就是沒有發(fā)生過
把隨機(jī)函數(shù)生成的數(shù)永遠(yuǎn)為一組數(shù)據(jù):用隨機(jī)函數(shù)生成向量,后運(yùn)行set.seed(10086)
x[match(y,x)] 和 x[order(x)]
排序,如何調(diào)整元素順序
結(jié)論:sort(x)等于x[order(x)],背誦下來
兩個(gè)向量沒有做關(guān)聯(lián)的操作,可以用order函數(shù)排序?qū)?yīng)信息
向量匹配排序-match,match函數(shù)是連線用的
x[match(y,x)] 的以后用法:以y作為模版,給x調(diào)順序。
match:誰在中括號外面,誰就在后面, x[match(y,x)] ,以y作為模板,用x作為原料去取子集,按照一個(gè)順序取子集,取出來的子集和y一樣。
需要背誦的兩個(gè)用法: x[match(y,x)] 和 x[order(x)]
練習(xí)題:在以下x和y表格里如何將y的列名一對一替換為ID
切換Rproj的時(shí)候出現(xiàn)彈窗:是否將工作空間保存到 .Rdata ?
答案是:不保存,之前單獨(dú)保存好腳本和圖片,這里出現(xiàn)的提示是否臨時(shí)保存,不需要保存。
.Rdata ?是什么:
以 . 開頭的文件,通常用作配置,系統(tǒng)默認(rèn)隱藏這類文件
.Rdata 是保存工作空間的默認(rèn)文件
.History 是保存歷史命令的默認(rèn)文件
如果打開Rstudio特別慢,可能是因?yàn)?.Rdata 保存了很大的變量,可以找到 .Rdata 文件將其刪除。
在Rproj右下角打開腳本時(shí),編輯器腳本的中文注釋出現(xiàn)亂碼,解決如下:
以上內(nèi)容是聽 生信技能樹 小潔老師的 R語言線上課 ,根據(jù)自己的理解記錄下來,小潔老師授課非常細(xì)心,對不同水平的同學(xué)都照顧到,并且補(bǔ)充很多技巧以及注意事項(xiàng)。
之前學(xué)習(xí)過R語言,那時(shí)對向量認(rèn)識不夠深,也沒有重視,數(shù)據(jù)框的列單獨(dú)拿出來就是一個(gè)向量。認(rèn)真聽小潔老師的講解以及最近跑幾個(gè)GEO數(shù)據(jù)集發(fā)現(xiàn)學(xué)會(huì)對向量的熟練操作以及熟練一些重要的函數(shù),在實(shí)戰(zhàn)過程中會(huì)順利些。
1. 判斷存在:一個(gè)元素是不是在向量中用 a%in%b
a="TT"
b=c("AA","AT","TT")
a %in% b
[1] TRUE
2. 判斷某一元素這向量中的索引(第幾個(gè)位置): index.TT=which(b==”TT”)
index.TT=which(b=="TT")#index.TT是想知道的索引號,which是判斷函數(shù),b是想知道的元素所在的向量
index.TT
[1] 3
3. 相當(dāng)于 python 中的字典, names 函數(shù)
b
[1] "AA" "AT" "TT"
names(b)=c("geno1","geno2","geno3")#geno mean genotype
names(b)
[1] "geno1" "geno2" "geno3"
names(b)[1]
[1] "geno1"
names(b)[1]="test"
names(b)
[1] "test""geno2" "geno3"
names(b)=NULL
b
[1] "AA" "AT"
b["geno2"]
"AT"
pop_name=c(“CEU”,"YRI")
names(pop_name)=c(1,2)
names(pop_name[1])=1
4. 去除某一元素: b[-index.nu]
#想去除元素”TT”,如果你不知道是第幾個(gè)索引,可以先判斷索引,再刪除。
b=c("AA","AT","TT")
names(b)=c("geno1","geno2","geno3")
index.TT=which(b=="TT")
b=b[-index.TT]
b
geno1 geno2
"AA""AT"
5. 相當(dāng)于 Python 中的 set() 函數(shù) 和 count() 函數(shù): unique() , table()
b=c("TT","AT","AT","TT","AA")
unique(b)#即相當(dāng)于去除所有的重復(fù),只保留一個(gè)
[1] "TT" "AT" "AA"
table(b)#以元素為name,統(tǒng)計(jì)各元素的個(gè)數(shù)
b
AA AT TT
122
6. 字符串的分割: strsplit()
test="AA"
strsplit(test)
錯(cuò)誤于strsplit(test) :缺少參數(shù)"split",也沒有缺省值
strsplit(test,split='')
[[1]]
[1] "A" "A"
test=strsplit(test,split='')[[1]]
test
[1] "A" "A"
7. 文本文檔的寫入: write.table()
write.table( res.matrix,file=new.file,sep='\t',quote=F,row.names=F,col.names=F,append=T)#quote=F去掉引號后寫入,row.names=F去掉行的名字寫入,否則會(huì)把名字寫進(jìn)去
##寫入數(shù)據(jù)時(shí)候最好把數(shù)據(jù)存儲(chǔ)成一個(gè)matrix然后直接寫。要是每行每行寫的話要注意數(shù)據(jù)的格式了。先建立一個(gè)空的matrix,見8,然后通過rbind或者cbind疊加上去。
方法一:
a=c()
b=c(“AA”,”TT”,”CC”)
for (i in 1:3){
a=c(a,b)
}
write.table(a,file=”test.txt”)#你會(huì)發(fā)現(xiàn)結(jié)果是
AA
TT
CC
….
##而且還有行和列的名字,因?yàn)闆]有設(shè)置參數(shù)。因?yàn)閷τ赾向量來說,寫的話默認(rèn)是豎著寫的,每個(gè)元素占一行。所以比較方便的就是rbind
方法二:
a=c()
b=c(“AA”,”TT”,”CC”)
for (i in 1:3){
a=rbind(a,b)
}
write.table(a,file=”test.txt”,quote=F,row.names=F,col.names=F)#你會(huì)發(fā)現(xiàn)結(jié)果是
AA TT CC
AA TT CC
AA TT CC
##原因是rbind把最總結(jié)果當(dāng)做矩陣了。對于R數(shù)據(jù)的寫入最好能生成最后的矩陣再寫入。但是西面的梅一行寫一次和方法二的效果是想通的,但是要用到append參數(shù)。
a=c()
b=c(“AA”,”TT”,”CC”)
for (i in 1:3){
a=rbind(a,b)
write.table(a,file=”test.txt”,quote=F,row.names=F,col.names=F,append=T)
}
8. 建立一個(gè)空的 matrix :
res.matrix - matrix( ,nrow=0,ncol=6 )##這樣就建立了一個(gè)0行6列的空matrix了。
9. 如何將 R 運(yùn)行結(jié)果輸出到文件
x=read.table("F:/my/work/chengxu/PValue/pc2jieguo/pc2302.txt")
z=t(x)
ks.test(y,z)
Two-sample Kolmogorov-Smirnov test
data:y and z
D = 0.207, p-value 2.2e-16
alternative hypothesis: two-sided
如上面運(yùn)行結(jié)果,我想將p-value 2.2e-16自動(dòng)保存到一個(gè)文件中,如何用R程序?qū)崿F(xiàn),謝謝!
sink("output.txt")
print(ks.test(y,z)$p.value)
sink()
10 降序排列:
a=c(1,1.2,0.1,4,5,-0.1)
a=sort(a,decreasing=T)
a
[1]5.04.01.21.00.1 -0.1
11. 取前1%的數(shù)
a=c(1:10,4:20,1:100,1:1000)
a=sort(a,decreasing=T)#先降序
sig=a[round(length(a)*0.01)]
sig
[1] 990
12.在shell中直接執(zhí)行R腳本
R CMD BATCH --argstest.R
13. R中高級作圖的方法
14:設(shè)置字體類型:
par(family='Times New Roman')
15:控制圖形四周的空白大小
par(mfrow=c(3,1),mar=c(0,0,0,0))
其中mar是四周的間距,分別為x,y上下的距離
16控制作圖區(qū)域的大小layout
layout(c(1,2,3),height=c(1,1,0.5))
分成豎著三份, 其中三份比列依次為(高度依次為2:2:1)
17保留兩位小數(shù)
round(0.123,digits=2)
18 在原有圖的基礎(chǔ)上畫圖:
par(fig=c(0.1,0.5,0.43,0.65), new=TRUE)
19 只顯示y軸
plot(1:10,1:10,axes=F)
axis(2,at.....)
20 調(diào)節(jié)刻度方向 las
plot(1:10,1:10,las=1)
21 屏幕分割
layout(matrix(1:16,4,4))###豎著plot
par(mfrow=c(4,4))##橫著plot
22.邏輯表示或者
xor為異或,兩值不等為真,兩值相等為假。例:xor(0, 1)
23. 從向量中隨機(jī)取幾個(gè)數(shù)sample
sample(rep(1:1000),10)
23 字符串轉(zhuǎn)換成小數(shù)浮點(diǎn)型
as.numeric("0.123")
24. 讀取不規(guī)范的文本
f=readLines(afile,n=1)#n表示讀幾行
f=strsplit(f,'\t')##分割
f[1][[1]]##第一行
f[1][[1]][1]##第一行 第一個(gè)字符串
25. write 寫入文件
write(afile, "a\tb\t",append=T) #沿著每行一次 寫入
26. 不需要循環(huán),這直接對matrix沒行或者每列進(jìn)行篩選操作apply()
apply(data,col2 or row1, max0)
27.保留2位小數(shù)
a=2.300
a=as.numeric(sprintf(“%.3f”,a))
28。調(diào)出假設(shè)檢驗(yàn)的p value
t.test(data1,data2)$p.value