Вы можете использовать функцию readLines
для сканирования файла один за другим. Таким образом, вам не нужно загружать все в память. Одна возможность - использовать следующую функцию.
Не лаконично, не быстро (поскольку вы читаете построчно), но оно дает вам информационный кадр без чтения всего файла. Если вы хотите только сгенерировать новый файл, во что бы то ни стало используйте что-то другое, кроме R. Представленное здесь решение awk кажется наилучшим.
ReadFile <- function(file){
DF <- data.frame(ID=numeric(0),value=numeric(0))
while(1){
z <- readLines(file,1)
if(length(z)==0 | z=="") {break}
Start <- if(grepl("start",z))
as.numeric(gsub(".+start=(\\d+).+","\\1",z))
if(is.null(Start)){
DF <- rbind(DF,
data.frame(ID=ID,value=as.numeric(z))
)
ID <- ID + 1
} else {
ID <- Start
}
}
return(DF)
}
Проверено на ваших данных:
ZZ <- textConnection("fixedStep chrom=chr7 start=10239 step=1
0.064
0.076
fixedStep chrom=chr7 start=10262 step=1
0.076
0.089
fixedStep chrom=chr7 start=10398 step=1
0.045
0.089
")
> ReadFile(ZZ)
ID value
1 10239 0.064
2 10240 0.076
3 10262 0.076
4 10263 0.089
5 10398 0.045
6 10399 0.089