R語言之簡單批量處理

示例數(shù)據(jù)
提取碼:p3pn

1. 循環(huán)計算獲取結果

展示并設定工作路徑
list.dirs()
setwd('YT')
數(shù)據(jù)準備
map = read.table('map.txt',row.names = 1, header = T)
nti = read.table('bNTI.txt',row.names = 1, header = T)
rc = read.table('RCbray.txt',row.names = 1,header = T)
設定要考察的所有組合
grps = list('T1','T2','T4','T8','T16',
            c('T1','T2'),c('T2','T4'),c('T4','T8'),c('T8','T16'),
            c('T1','T2','T4'),c('T2','T4','T8'),c('T4','T8','T16'),
            c('T1','T2','T4','T8'),c('T2','T4','T8','T16'),
            c('T1','T2','T4','T8','T16')) #there are 15 grps in total, wtf.
新建空數(shù)據(jù)框用于存儲計算結果
result = matrix(0,nrow = 0, ncol = 6,dimnames = list(c(),
                                                     c("Variable selection",
                                                       "Homogeneous selection",
                                                       "Dispersal limitation",
                                                       "Homogenizing dispersal",
                                                       "Undominated process","summary")))
新建一個函數(shù)將兩個對稱矩陣轉換為row-col-value1-value2的線性形式
mtrx2cols = function(m1,m2,val1,val2){
  lt = lower.tri(m1)
  res = data.frame(row = rownames(m1)[row(m1)[lt]],
                   col = rownames(m1)[col(m1)[lt]],
                   val1 = m1[lt], val2= m2[lt])
names(res)[3:4] = c(val1,val2)
return(res)
}
循環(huán)提取各組合對應的樣品
for (i in seq(15)){
  # extract samples from the whole data
  submap = subset(map,time %in% grps[[i]])  #A %in% B而钞,表示從A中提取出B對應的部分樣品
  subnti = nti[rownames(submap),rownames(submap)]
  subrc  = rc[rownames(submap),rownames(submap)]
  #now the samples in subnti and subrc are in same order
  #將對稱矩陣轉換為row-col-value的線性形式
  res = matrix2cols(subnti,subrc,'betaNTI','RCbray')
  
  #循環(huán)過程中的中間變量,用于存儲本循環(huán)的計算結果,后續(xù)會將這個中間變量與恒定變量合并疯潭,此中間變量的使命就完成了祠锣。
  a = matrix(0,nrow = 1, ncol = 6,dimnames = list(c(),
                                                  c("Variable selection",
                                                    "Homogeneous selection",
                                                    "Dispersal limitation",
                                                    "Homogenizing dispersal",
                                                    "Undominated process","summary")))
  
 #根據(jù)兩列值的大小谓谦,分別對應至相應的過程吨凑,并計算相對比例
  num = dim(res)[1]#獲取總的行數(shù)
  a[,1] = sum(res$betaNTI>2)/num#獲取betaNTI > 2的數(shù)據(jù)行所占的比例
  a[,2] = sum(res$betaNTI<(-2))/num
  a[,3] = sum(abs(res$betaNTI)<2 & res$RCbray>0.95)/num
  a[,4] = sum(abs(res$betaNTI)<2 & res$RCbray<(-0.95))/num
  a[,5] = sum(abs(res$betaNTI)<2 & abs(res$RCbray)<0.95)/num
  a[,6] = num
 #每個組合均包含多個元素酝碳,這里講該組合中的所有元素拼接在一起矾踱,作為該組的標記
  rownames(a) = paste(grps[[i]][1:length(grps[[i]])],collapse = '-')
  
  result = rbind(result,a)#將中間變量和恒定變量按行合并
  
}
#導出本次循環(huán)的計算結果
write.csv(result,'../YT.summary.csv')
#返回上一級路徑,重新開始執(zhí)行另一個文件
setwd('../')

2. 后續(xù)分析疏哗,可視化

數(shù)據(jù)準備
cs = read.csv('CS.summary.csv')
cq = read.csv('CQ.summary.csv')
yt = read.csv('YT.summary.csv')
#合并呛讲,并定義組別
ecology = rbind(cs,cq,yt)
ecology$site = rep(c('CS','CQ','YT'),each = 10)

library('reshape2')
dat = melt(ecology)#變?yōu)榱斜淼男问剑阌诶L圖
names(dat) = c('pairs','site','process','value')
#去除部分不需要的數(shù)據(jù)返奉,`!=`表示不等于
dat = subset(dat, process != 'summary')
初步可視化
library('ggplot2')
library('scales')

p <- ggplot(dat,aes(pairs,value,fill = process)) +
  theme_bw() +
  coord_flip() + #坐標軸反轉
  scale_y_continuous(labels = percent) + #設定y軸為百分比形式
  facet_grid(~site) +#按*site*進行分頁
  labs(x = '', y = '', fill = '') +#坐標軸標題為空
  geom_bar(stat = 'identity',position = 'fill') + #繪制堆積條形圖
  scale_fill_brewer(palette = 'Paired') + #個性化配色方案
  theme(panel.spacing = unit(0.5,'cm'),#設置分頁面之間的間距大小
        axis.text = element_text(face = 'bold',color = 'black',size = 6),
        legend.text = element_text(face = 'bold',color = 'black',size = 8),
        strip.text = element_text(face = 'bold',color = 'black',size = 10))
ggsave(p,filename = 'ecological-process.jpg',width = 8,height = 3,dpi = 600)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末贝搁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子芽偏,更是在濱河造成了極大的恐慌雷逆,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件污尉,死亡現(xiàn)場離奇詭異膀哲,居然都是意外死亡,警方通過查閱死者的電腦和手機被碗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門某宪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛮放,你說我怎么就攤上這事缩抡。” “怎么了包颁?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長压真。 經(jīng)常有香客問我娩嚼,道長,這世上最難降的妖魔是什么滴肿? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任岳悟,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘贵少。我一直安慰自己呵俏,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布滔灶。 她就那樣靜靜地躺著普碎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪录平。 梳的紋絲不亂的頭發(fā)上麻车,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音斗这,去河邊找鬼动猬。 笑死,一個胖子當著我的面吹牛表箭,可吹牛的內容都是我干的赁咙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼免钻,長吁一口氣:“原來是場噩夢啊……” “哼序目!你這毒婦竟也來了?” 一聲冷哼從身側響起伯襟,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤猿涨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后姆怪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叛赚,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年稽揭,在試婚紗的時候發(fā)現(xiàn)自己被綠了俺附。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡溪掀,死狀恐怖事镣,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情揪胃,我是刑警寧澤璃哟,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站喊递,受9級特大地震影響随闪,放射性物質發(fā)生泄漏。R本人自食惡果不足惜骚勘,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一铐伴、第九天 我趴在偏房一處隱蔽的房頂上張望撮奏。 院中可真熱鬧,春花似錦当宴、人聲如沸畜吊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玲献。三九已至,卻和暖如春逗嫡,著一層夾襖步出監(jiān)牢的瞬間青自,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工驱证, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留延窜,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓抹锄,卻偏偏與公主長得像逆瑞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子伙单,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容