如何在R中执行脚本的循环和迭代?

穆罕默德·图菲克(Mohammed Toufiq)

我正在运行一个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)
  1. 选择要使用的主题数据库(即,TSS附近的生物和距离)

    data(motifAnnotations_hgnc)
    motifRankings <- importRankings("./hg19-tss-centered-10kb-7species.mc9nr.feather")
    
  2. 计算浓缩

    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()
    
  3. 选择重要的图案和/或对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 = ",")
    
  4. 鉴定每个母题中具有最佳富集的基因

    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 = ",")
    
  5. 绘制一些图案

    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()
    
  6. 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)
    
  7. 建立网络并导出为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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Selenium JavascriptExecutor中执行脚本

来自分类Dev

如何在特定的div中执行脚本

来自分类Dev

如何在不同目录中执行脚本?

来自分类Dev

如何在运行Mongodb的Mongoose中执行脚本?

来自分类Dev

如何在Selenium JavascriptExecutor中执行脚本

来自分类Dev

如何在bash的父子行为中执行脚本?

来自分类Dev

如何在不同目录中执行脚本?

来自分类Dev

如何获取R中执行脚本的目录?

来自分类Dev

如何在Puppet中安装和运行脚本

来自分类Dev

在ng-repeat的每次迭代中执行脚本/功能

来自分类Dev

在 r 中循环以运行脚本

来自分类Dev

如何在程序启动和结束时执行脚本

来自分类Dev

如何在Mint KDE 17.2和Cinnamon 17.3上从桌面正确执行脚本

来自分类Dev

如何执行循环以更改R中的迭代次数

来自分类Dev

如何在WinSCP中运行脚本

来自分类Dev

如何在包含Write-Host命令的代码创建的Powershell Shell中执行脚本?

来自分类Dev

如何在zsh中执行脚本然后变得交互式?

来自分类Dev

如何在当前路径中输入每个目录并执行脚本

来自分类Dev

如何在从ALB目标组中删除的EC2实例上执行脚本?

来自分类Dev

按下快捷键时如何在Shell中执行脚本

来自分类Dev

如何在zsh中执行脚本然后变得交互式?

来自分类Dev

如何在Shell脚本中创建循环以执行特定任务?

来自分类Dev

如何在bash脚本中循环执行Shell命令?

来自分类Dev

如何在PowerShell中继续执行脚本块的行?

来自分类Dev

如何在屏幕切换时执行脚本?

来自分类Dev

如何在 SureFire 测试阶段前后执行脚本

来自分类Dev

如何在Rust中从for循环中迭代和提取值

来自分类Dev

如何在每次迭代中循环和保存数据

来自分类Dev

在终端中执行脚本

Related 相关文章

热门标签

归档