文件及文件夹命名规范
-
尽量不要数字、
_
开头 -
分隔符尽量使用
_
,使用其他分隔符如-
使用R读入需要修改对应的参数,否则会被强行转换 -
输出的文件,最好加上时间戳,文件夹最好不要加时间戳,不方便后续调用,按照功能或者使用工具名命名
-
命名方式:
-
文件名:
(样本名/分组名_)功能(分析类型)_使用工具名_时间戳.后缀名
group1_vs_group2_differentiallyExpressedAnalysis_edgeR_20210930.csv
-
文件夹:
功能/分析类型/使用软件名
/Result/Alignment/STAR/bam/
-
编程规范
-
头文件
- 脚本的功能
- 版本信息
- 作者联系方式
- 版权声明
- 历史记录
- 脚本内特殊命令,使用绝对路径方式运行
- 脚本运行时需要的环境变量预先声明与设置
-
变量命名规范
-
各个变量名,可以使用小写字母开头,以下划线分割各单词,名称应该简明扼要描述该变量的含义,如
output_file_name
-
函数命名,使用小写字母开头,以驼峰方式命名,名称应该简明扼要描述该函数的作用,如
prepareDataVolcanoPlot
-
类名,使用大写字母开头,以驼峰方式命名,名称应该简明扼要描述该函数的作用,如
GeneExpressionResults
-
-
间隔
-
对于不同功能区块,推荐使用python方式的
tab
分割,比如if语句、循环语句、函数语句内部,如for(i in 1:100){ a <- b + i s <- a + b }
-
不同变量之间或者符号之间使用一个空格间隔,如
a = b + c
-
一条语句不适合写的过长,这样不利于阅读,超过一定长度,或者对于一些参数多的函数,可以一行仅放置一个参数的赋值,彼此对齐,利于清晰查阅各参数。
-
对于函数或者循环等,后接一个代码块,区块分隔符
{}
(R语言)如1中所示,分隔符{}
分别在单独一行,中间接代码
-
-
注释
- 重要的语句、功能需要注释其目的、功能
- 函数需要说明函数的功能,实现什么功能;有哪些参数,每个参数是什么功能
- 不同代码块可以使用注释区别
# 示例
MDSPlot <- function(count_mat, group_map, group_compare, output_dir){
library(ggplot2)
library(edgeR)
library(dplyr)
today <- format(Sys.Date(), format = '%Y%m%d')
# get special group samples' expMatrix
group_map <- group_map[(group_map$Group %in% group_compare), ]
count_mat <- count_mat[ ,(colnames(count_mat) %in% group_map$Sample)]
group <- group_map$Group
sample <- group_map$Sample
# log_normal_count
dgelist <- DGEList(counts = as.matrix(count_mat))
keep <- rowSums(cpm(dgelist) > 1 ) >= 2
dgelist <- dgelist[keep, , keep.lib.sizes = FALSE]
# TMM normalization
dgelist_norm <- calcNormFactors(dgelist, method = 'TMM')
# log-norm+1
norm_res <- dgelist_norm@.Data[[1]] %>% data.frame()
log_norm <- log2(norm_res+1)
# mds
mds <- plotMDS(dgelist_norm)
print(mds@.Data[[6]])
print(mds@.Data[[7]])
print(mds@.Data[[8]])
print(mds@.Data[[9]])
print(mds@.Data[[5]])
var_explained <- (mds$var.explained*100) %>% round(., digits = 0) %>% as.character
x_lab <- paste0(mds$axislabel, '1', '(', var_explained[1], '%', ')')
y_lab <- paste0(mds$axislabel, '2', '(', var_explained[2], '%', ')')
toplot <- data.frame(Dim1 = mds$x, Dim2 = mds$y, Sample = sample, Group = group)
# theme -------------------------------------------------------------------
mytheme<-theme_bw()+theme(
panel.grid=element_blank(),
text=element_text(colour="black"),
axis.text=element_text(size=rel(1)),
axis.title=element_text(size=rel(1.2),lineheight=0.4,hjust=0.5),
panel.border=element_rect(size=0.3,colour="black"),
plot.title=element_text(size=rel(1.5),lineheight=0.7,hjust=0.5),
legend.title=element_text(colour="black", size=rel(1.2)),
legend.text = element_text(size = rel(1.2)),
legend.key=element_rect(colour = "white"),
axis.line=element_blank()
)
ggplot(toplot, aes(Dim1, Dim2, colour = Group)) + geom_point(size = 3) + mytheme +
xlab(x_lab) + ylab(y_lab) +
geom_text(aes(label = Sample, vjust = 1.1, hjust = -0.5), show_guide = FALSE)
group_name <- ''
for (i in 1:length(group_compare)) {
group_name <- paste(group_name, group_compare[i], sep = '_')
}
out_name <- paste0(output_dir, '/MDSplot_', today, group_name, '.pdf')
ggsave(out_name, width = 10, height = 8)
return(log_norm)
}