Что у меня: ~ 100 txt файлов, каждый из которых имеет 9 столбцов и> 100 000 строк Что я хочу: Комбинированный файл с двумя столбцами, но все строки. то это должно быть транспонировано для вывода> 100 000 столбцов & 2 ряда.Скопируйте и скопируйте многие файлы набора данных фиксированного формата быстро
Я создал функцию ниже, чтобы систематически проходить через файлы в папке, извлекать нужные данные, а затем после каждого файла объединяться вместе с исходным шаблоном.
Проблема: это отлично работает на моих небольших тестовых файлах, но когда я пытаюсь сделать это на больших файлах, я сталкиваюсь с проблемой выделения памяти. Моего 8 ГБ ОЗУ просто недостаточно, и я предполагаю, что часть этого в том, как я написал свой код.
Мой вопрос: Есть ли способ перебрать файлы, а затем присоединиться ко всем сразу в конце, чтобы сохранить время обработки?
Кроме того, если это неправильное место для размещения такого рода вещей, что является лучшим форумом для ввода кода WIP?
##Script to pull in genotype txt files, transpose them, delete commented rows &
## & header rows, and then put files together.
library(plyr)
## Define function
Process_Combine_Genotype_Files <- function(
inputdirectory = "Rdocs/test", outputdirectory = "Rdocs/test",
template = "Rdocs/test/template.txt",
filetype = ".txt", vars = ""
){
## List the files in the directory & put together their path
filenames <- list.files(path = inputdirectory, pattern = "*.txt")
path <- paste(inputdirectory,filenames, sep="/")
combined_data <- read.table(template,header=TRUE, sep="\t")
## for-loop: for every file in directory, do the following
for (file in path){
## Read genotype txt file as a data.frame
currentfilename <- deparse(substitute(file))
currentfilename <- strsplit(file, "/")
currentfilename <- lapply(currentfilename,tail,1)
data <- read.table(file, header=TRUE, sep="\t", fill=TRUE)
#subset just the first two columns (Probe ID & Call Codes)
#will need to modify this for Genotype calls....
data.calls <- data[,1:2]
#Change column names & row names
colnames(data.calls) <- c("Probe.ID", currentfilename)
row.names(data.calls) <- data[,1]
## Join file to previous data.frame
combined_data <- join(combined_data,data.calls,type="full")
## End for loop
}
## Merge all files
combined_transcribed_data <- t(combined_data)
print(combined_transcribed_data[-1,-1])
outputfile <- paste(outputdirectory,"Genotypes_combined.txt", sep="/")
write.table(combined_transcribed_data[-1,-1],outputfile, sep="\t")
## End function
}
Заранее спасибо.
Это может быть легко обработано [fread] (http://www.inside-r.org/packages/cran/data.table/docs/fread) и пакетом 'data.table'. – user227710