注释和富集

Script-代码分析--FPKM

2021-06-08  本文已影响0人  QXPLUS

count2FPKM

  1. 参数设置
# commandArgs用来接收命令行参数,并赋值给args
args<-commandArgs(T)
# 对传递进来的参数进行条件判断,满足条件则继续执行脚本,不满足则退出,并打印出正确调用的提示。
if(length(args)<2){
cat("Usages Rscript count2FPKM.r  gene_count.tsv gene_length.txt gene_FPKM.tsv","\n")
quit('no')
}
  1. 脚本函数语句
# count --> FPKM的函数
# 输入:count matrix; gene长度文件
# 输出:FPKM matrix
calc_fpkm <- function(counts, gene2length) {
    ## counts:gene-sample matrix; gene2length:gene-genelength txt file
    ## match() 返回输入的counts矩阵,gene2length文件中,能匹配上的gene2length的index,并用order保存index 文件
    order <- match(rownames(counts),gene2length[,1])
    ## 筛选与gene2length对应的counts矩阵
    norm <- counts[!is.na(order),]
    order <- order[!is.na(order)]
    ## 计算FPKM
    ## 基因长度与测序深度的加权
    weighted_sum_lengths <- colSums(norm*as.numeric(gene2length[order,2]))
    fpkms <- t(t(norm)/weighted_sum_lengths)*10^9
    ## 保留4位小数
    fpkms <- round(fpkms,4)
    return(fpkms)
}

或者

calc_fpkm <- function(counts, gene2length){
    genes <- gene2length[,1]  %in% rownames(counts)
    sub_counts <- counts[genes,]
    sub_gene2length<- gene2length[genes,]
    weighted_sum_lengths <- colSums(sub_counts*as.numeric(sub_gene2length[genes,2]))
    fpkms <- t(t(sub_counts )/weighted_sum_lengths)*10^9
    fpkms <- round(fpkms,4)
    return(fpkms)
}
  1. 脚本输出结果保存
    函数调用
counts<-read.table(args[1],head=T,sep="\t",row.names=1,check.names=F)
gene2length<-read.table(args[2],sep="\t",head=T,check.names=F)
res<-calc_fpkm(counts,gene2length)

结果保存

## 筛选在细胞中有表达的genes
res<-res[rowSums(res)>0,]
## 转化为dataframe格式
### 一般 data.frame(data, check.names=F)和 write.table(data,quote=F,sep="\t",row.names=F) 一起使用。
res <- data.frame(gene=rownames(res),res,check.names=F)
write.table(res,args[3],quote=F,sep="\t",row.names=F)

脚本中R语言的函数/方法

上一篇 下一篇

猜你喜欢

热点阅读