Как выполнить цикл и итерацию скрипта в R?

Я запускаю сценарий 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")
    

Просто чтобы было ясно, вы хотите перебирать файлы? Таким образом, код, который вам нужен, будет считываться в другом файле во второй строке Data_file <- read.csv(...) для каждой итерации цикла for?

Dan Kennedy 13.12.2020 21:49

@ Дэн Кеннеди, большое спасибо за ваш комментарий. Да, я хочу перебирать файлы.

Mohammed Toufiq 13.12.2020 22:06

Хорошо, это возможно, вам просто нужно создать вектор с именами файлов в нем и перебрать его. Можете ли вы изменить свой вопрос, включив в него имена файлов, которые вы хотите прочитать? Затем я могу написать правильный ответ, чтобы решить проблему.

Dan Kennedy 13.12.2020 22:29

@ Дэн Кеннеди, спасибо. Фрейм данных вопросов и фрагментов был пересмотрен. Также включены имена файлов для чтения.

Mohammed Toufiq 14.12.2020 06:03
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
4
469
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я написал это на основе приведенных имен файлов примеров:

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 в локальном каталоге. Вы можете уточнить его, если это должны быть только файлы .txt, начинающиеся с «M»:

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"))

отличный. Спасибо за очень полезные материалы. Это очень полезно. Я мог легко экспортировать файлы *.csv и pdf. Один вопрос, пожалуйста, дайте мне знать, как нам экспортировать файлы *.html для моего кода ветвей 7 и 8 выше, когда мы запускаем этот тип кода. Пробовал пару функций, не работает.

Mohammed Toufiq 14.12.2020 12:37

не могли бы вы предоставить входные данные/пример об экспорте в формате файла html для веток 7 и 8 с использованием функции «paste0(new_directory_name,»/»,<insert-output-name>)».

Mohammed Toufiq 14.12.2020 16:04

Просто уточню, вы пробовали html_test <- paste0(new_directory_name,"/","dtable.html") и это не сработало?

Dan Kennedy 14.12.2020 22:50

я попытался запустить предложенный код, он не сохраняет файлы html в каталогах. Вставка кода для ветки 7 и 8 в другой комментарий/ответ на ваш раздел вопросов. Пожалуйста помогите.

Mohammed Toufiq 15.12.2020 05:43

Ах я вижу. Похоже, это известная проблема с функцией saveWidget(): github.com/ramnathv/htmlwidgets/issues/299

Dan Kennedy 15.12.2020 06:44

Я отредактировал ответ, чтобы использовать решение проблемы github, на которую я ссылался. Теперь это должно работать для ваших виджетов, сохраняя их в html.

Dan Kennedy 15.12.2020 06:49

большое спасибо за постоянную помощь. Очень признателен.

Mohammed Toufiq 15.12.2020 07:14

есть один глюк в скрипте. Когда я применяю скрипт к большому количеству файлов в каталоге. Скрипт выдает ошибку и прекращает работу с остальными файлами в каталоге. Это может быть связано с тем, что в некоторых файлах нет совпадающих генов/признаков (Module_10_1_geneLists) по сравнению с «рейтингами» наборов генов (т. е. motifRankings). Любые входные данные/функции о том, как превзойти проход/выполнение в цикле, когда присутствует один из этих типов файлов. Спасибо.

Mohammed Toufiq 17.12.2020 09:16

'Ошибка в .RcisTarget_calcAUC(geneSets = geneSets, ранжирование = ранжирование: в ранжирование включено менее 80% генов/признаков в геномных наборах. Проверьте идентификаторы в 'рейтингах' (столбцах) и 'geneSets ' соответствовать.'

Mohammed Toufiq 17.12.2020 09:17

Похоже, вы просто хотите, чтобы цикл for продолжался для последующих итераций после ошибки. Этот ответ должен помочь: stackoverflow.com/questions/14748557/skipping-error-in-for-l‌​oop

Dan Kennedy 18.12.2020 01:34

7. Конечным результатом RcisTarget является data.table и экспорт в html.

motifEnrichmentTable_wGenes_v1_wLogo <- addLogo(motifEnrichmentTable_wGenes_v1)
  resultsSubset <- motifEnrichmentTable_wGenes_v1_wLogo[1:147,]
  Type_v2 <- "Motifs_Table"
  
  # 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)
  
  library(DT)
  library(webshot)
  library(htmltools)
  library(xml2)
  ## 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=1000))
  html_test <- paste0(new_directory_name,"/","dtable.html")
  ##To save files in the pdf format###
  #saveWidget(dtable, html_test)
  #webshot(html_test, paste0(new_directory_name,"/", "motif.pdf"))

8. Построение сети и экспорт в формат html

# 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)
  
  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")

  html_test_v1 <- paste0(new_directory_name,"/","Network.html")
  #saveWidget(Network, html_test_v1)
  #webshot(html_test_v1, paste0(new_directory_name,"/", "Network.pdf"))

Другие вопросы по теме