R Выполнение операции с огромным количеством файлов более быстрым способом - PullRequest
0 голосов
/ 19 декабря 2018

Я должен выполнить эту операцию для 10200 текстовых файлов:

s[s$POS==sample[tail(which(sample$obs_pval == min(sample$obs_pval)), 1),1],])

и записать в один файл вывод каждой операции для каждого файла, который выглядит следующим образом:

        ID            CHROM      POS
20_49715203_T_C_b37    20      49715203

ИтакВ итоге у меня будет один файл с 10200 строками, как указано выше.

Прямо сейчас мой код выглядит так:

fileNames <- lapply(Sys.glob("ENSG*.txt"), read.table)
s=read.table("snpPos", header=TRUE)

for (fileName in fileNames) {

  # read original data:
  sample <- read.table(fileName,
  header = TRUE,
   sep = ",")

  # create new data based on contents of original file:
  allEQTLs <- data.frame(
    File = fileName,
    EQTLs = s[s$POS==sample[tail(which(sample$obs_pval == min(sample$obs_pval)), 1),1],])

  # write new data to separate file:
  write.table(allEQTLs, 
    "EQTLs.txt",
    append = TRUE,
    sep = ",",
    row.names = FALSE,
    col.names = FALSE)
}

Сейчас я делаю это стандартным образом, и это занимаетмного времени.Есть ли лучший / более эффективный способ написания этого кода?Следует также отметить, что каждый из этих файлов ENSG * .txt содержит не менее 4000 строк.Самый большой файл имеет 15 миллионов строк.

1 Ответ

0 голосов
/ 19 декабря 2018

Попробуйте fread и fwrite из пакета data.table, если это операции чтения / записи, занимающие большую часть времени.(Вы можете проверить это последнее условие с помощью инструментов Rprofiling - например, функция Rprof.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...