我正在运行一个R脚本来分析一些生物学数据。以下提供了代码段数据和脚本的示例。该数据文件有很多列(但我想重点关注第5列-Gene)。我有100多个这样的数据文件(将所有文件中的第5个Gene列视为感兴趣的列)。目前,我正在R中分别运行每个文件,并且过程很繁琐。我想同时为所有数据文件运行一个R脚本,并根据文件名将所有数据保存在不同的文件夹中。是否可以在脚本中一次循环或迭代并分析所有数据文件。请协助我。
谢谢,
图菲克
格式化的问题和修订的数据框
插入:要读取的文件名
M3.1_IPA.txt
M8.1_IPA.txt
M8.2_IPA.txt
M8.3_IPA.txt
1.加载基因集进行分析
Data_file <- read.delim(file = "./M3.1_IPA.txt", stringsAsFactors = FALSE, check.names = FALSE, row.names = NULL)
dput(head(Data_file, 5))
structure(list(row.names = c("M3.1_ALPP", "M3.1_ALS2CR14", "M3.1_ANKRD30B",
"M3.1_ARL16", "M3.1_BCYRN1"), X = 1:5, Module = c("M3.1", "M3.1",
"M3.1", "M3.1", "M3.1"), Title = c("Cell Cycle", "Cell Cycle",
"Cell Cycle", "Cell Cycle", "Cell Cycle"), Gene = c("ALPP", "ALS2CR14",
"ANKRD30B", "ARL16", "BCYRN1"), Probes = c("ILMN_1693789", "ILMN_1787314",
"ILMN_1730678", "ILMN_2188119", "ILMN_1678757"), Module_gene = c("M3.1_ALPP",
"M3.1_ALS2CR14", "M3.1_ANKRD30B", "M3.1_ARL16", "M3.1_BCYRN1"
)), row.names = c(NA, 5L), class = "data.frame")
Module_10_1 <- Data_file[,5]
Module_10_1_geneLists <- list(Module_10_1_geneListName=Module_10_1)
选择要使用的主题数据库(即,TSS附近的生物和距离)
data(motifAnnotations_hgnc)
motifRankings <- importRankings("./hg19-tss-centered-10kb-7species.mc9nr.feather")
计算浓缩
motifs_AUC <- calcAUC(Module_10_1_geneLists, motifRankings, nCores=1)
Type = "Enrichment"
Module = "M10_1"
auc <- getAUC(motifs_AUC)
##Export the plots##
pdf(paste0(Type, "_", Module, "_AUC_Histogram_Plot.pdf"), height = 5, width = 10)
hist(auc, main="Module_10_1", xlab="AUC histogram",
breaks=100, col="#ff000050", border="darkred")
nes3 <- (3*sd(auc)) + mean(auc)
abline(v=nes3, col="red")
dev.off()
选择重要的图案和/或对TF进行注释
motifEnrichmentTable <- addMotifAnnotation(motifs_AUC, nesThreshold=3,
motifAnnot=motifAnnotations_hgnc)
##Export the Motif enrichment analysis results###
write.csv(motifEnrichmentTable, file ="./motifEnrichmentTable.csv", row.names = F, sep = ",")
鉴定每个母题中具有最佳富集的基因
motifEnrichmentTable_wGenes_v1 <- addSignificantGenes(motifEnrichmentTable,
rankings=motifRankings,
geneSets=Module_10_1_geneLists)
##Export the Motif enrichment analysis results##
write.csv(motifEnrichmentTable_wGenes_v1,
file ="./motifEnrichmentTable_wGenes_v1.csv",
row.names = F, sep = ",")
绘制一些图案
geneSetName <- "Module_10_1_Genelist"
selectedMotifs <- c("cisbp__M6275",
sample(motifEnrichmentTable$motif, 2))
par(mfrow=c(2,2))
Type_v1 <- "Few_motifs"
##Export the plots
pdf(paste0(Type_v1, "_", Module, "_Sig_Genes_Plot.pdf"), height = 5, width = 5)
getSignificantGenes(Module_10_1_geneLists,
motifRankings,
signifRankingNames=selectedMotifs,
plotCurve=TRUE, maxRank=5000, genesFormat="none",
method="aprox")
dev.off()
RcisTarget的最终输出是data.table并导出到html
motifEnrichmentTable_wGenes_v1_wLogo <- addLogo(motifEnrichmentTable_wGenes_v1)
resultsSubset <- motifEnrichmentTable_wGenes_v1_wLogo[1:147,]
Type_v2 <- "Motifs_Table"
library(DT)
## export the data table to html file format###
dtable <- datatable(resultsSubset[,-c("enrichedGenes", "TF_lowConf"), with=FALSE],
escape = FALSE, # To show the logo
filter="top", options=list(pageLength=100))
html_test <- "dtable.html"
saveWidget(dtable, html_test)
建立网络并导出为html格式
signifMotifNames <- motifEnrichmentTable$motif[1:3]
incidenceMatrix <- getSignificantGenes(Module_10_1_geneLists,
motifRankings,
signifRankingNames=signifMotifNames,
plotCurve=TRUE, maxRank=5000,
genesFormat="incidMatrix",
method="aprox")$incidMatrix
library(reshape2)
edges <- melt(incidenceMatrix)
edges <- edges[which(edges[,3]==1),1:2]
colnames(edges) <- c("from","to")
library(visNetwork)
motifs <- unique(as.character(edges[,1]))
genes <- unique(as.character(edges[,2]))
nodes <- data.frame(id=c(motifs, genes),
label=c(motifs, genes),
title=c(motifs, genes), # tooltip
shape=c(rep("diamond", length(motifs)), rep("elypse", length(genes))),
color=c(rep("purple", length(motifs)), rep("skyblue", length(genes))))
Network <- visNetwork(nodes, edges) %>% visOptions(highlightNearest = TRUE,
nodesIdSelection = TRUE)
##Export the network##
visSave(Network, file ="Network.html")
我已经根据给出的示例文件名编写了它:
file_names <- c("M3.1_IPA.txt","M8.1_IPA.txt","M8.2_IPA.txt","M8.3_IPA.txt")
最简单的方法是遍历1:length(file_names)
,并为每次迭代创建一组唯一的输出文件。根据您的问题,您想要将结果保存到其他文件夹。可以通过提取文件名(删除.txt),然后使用该名称创建一个新目录来完成此操作。然后,您可以将该迭代的所有输出保存到新目录中
然后为下一次迭代创建一个新目录,因此您不会保存以前的结果。
for(i in 1:length(file_names)){
Data_file <- read.csv(file = paste0("./",file_names[i]), stringsAsFactors = FALSE, check.names = FALSE)
Module_10_1 <- Data_file[,1]
Module_10_1_geneLists <- list(Module_10_1_geneListName=Module_10_1)
data(motifAnnotations_hgnc)
motifRankings <- importRankings("./hg19-tss-centered-10kb-7species.mc9nr.feather")
motifs_AUC <- calcAUC(Module_10_1_geneLists, motifRankings, nCores=1)
Type = "Enrichment"
Module = "M10_1"
auc <- getAUC(motifs_AUC)
# Extract the file name without the extension, so the directory with the results
# will correspond to this name:
new_directory_name <- gsub(x = file_names[i],pattern = "(.*)\\.txt","\\1")
#Create the new directory:
dir.create(new_directory_name)
##Export the plots##
# Save to the new directory
pdf(paste0(new_directory_name,"/",Type,"_", Module,"_AUC_Histogram_Plot.pdf"), height = 5, width = 10)
hist(auc, main="Module_10_1", xlab="AUC histogram",
breaks=100, col="#ff000050", border="darkred")
nes3 <- (3*sd(auc)) + mean(auc)
abline(v=nes3, col="red")
dev.off()
}
我省略了脚本的休息,因为保存的解决方案motifEnrichmentTable_wGenes_v1.csv
,_Sig_Genes_Plot.pdf
以及其它输出是一样的上面_AUC_Histogram_Plot.pdf
。您只需要使用将这些输出写入新目录即可paste0(new_directory_name,"/",<insert-output-name>)
。
如果您有很多文件,则可以手动file_names
在本地目录中搜索与正确模式匹配的文件,而不必手动创建矢量。例如
all_files <- dir()
file_names <- grep(all_files,pattern = "*.txt$",value = TRUE)
将返回本地目录中的所有.txt文件。如果只需要以“ M”开头的.txt文件,则可以对其进行进一步优化:
all_files <- dir()
file_names <- grep(all_files,pattern = "^M.*.txt$",value = TRUE)
如果不是本地目录中的所有.txt文件都是输入文件,则需要执行此操作,并且可能需要进一步优化正则表达式模式,直到仅捕获所需的txt文件为止。
对于.html文件,这要困难一些,因为saveWidget()
当前不允许您使用相对文件路径进行保存,但是有一种使用的解决方案withr::with_dir()
。这应该适用于第7部分:
withr::with_dir(new_directory_name, saveWidget(dtable, file="dtable.html"))
这应该适用于第8部分:
withr::with_dir(new_directory_name, saveWidget(Network, file="Network.html"))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句