一度に1行ずつ大きなファイルを読み込んでいます。すべてを高速化するためにやりたいことは、複数の行を並行して処理することです。しかし、私が今行っている方法は機能していません。私はこれを試したことがないので、それがどのように機能するかはよくわかりません。
library(foreach)
library(doParallel) #or with doMC
read.block <- function(ifile, lines, block, readFunc=read.csv,
skip=(lines*(block-1))+ifelse((header) & (block>1) & (!inherits(ifile, "connection")),1,0),
nrows=lines,header=TRUE,sep="\t",...){
if(block > 1){
colnms<-NULL
if(header)
{
colnams <- unlist(readFunc(ifile, nrows=1, header=FALSE, sep=sep, stringsAsFactors=FALSE))
#print(colnams)
}
p = readFunc(ifile, skip = skip, nrows = nrows, header=FALSE, sep=sep,...)
if(! is.null(colnams))
{
colnames(p) = colnams
}
} else {
p = readFunc(ifile, skip = skip, nrows = nrows, header=header, sep=sep)
}
return(p)
}
mendl.error <- matrix(, nrow=15, ncol=9)
foreach(i=1:15)%dopar%{
ifile.c <- file("testdata.csv", open = "r") #open file connection to read
ifile.valid <- read.block(ifile.c, lines=1, block=i) #read 1 line
close(ifile.c)
#do some other operations on the line which will be saved into a matrix
mendl.error[1,] <- ifile.valid
}