Программное обеспечение, которое я использую, создает файлы журнала с переменным количеством строк сводной информации, за которой следует множество данных с разделителями табуляции.Я пытаюсь написать функцию, которая будет считывать данные из этих файлов журнала во фрейм данных, игнорируя сводную информацию.Сводная информация никогда не содержит вкладки, поэтому работает следующая функция:
read.parameters <- function(file.name, ...){
lines <- scan(file.name, what="character", sep="\n")
first.line <- min(grep("\\t", lines))
return(read.delim(file.name, skip=first.line-1, ...))
}
Однако эти файлы журналов довольно велики, поэтому чтение файла дважды происходит очень медленно.Конечно, есть лучший способ?
Отредактировано, чтобы добавить:
Марек предложил использовать объект textConnection
.Способ, предложенный им в ответе, не подходит для большого файла, но работает следующее:
read.parameters <- function(file.name, ...){
conn = file(file.name, "r")
on.exit(close(conn))
repeat{
line = readLines(conn, 1)
if (length(grep("\\t", line))) {
pushBack(line, conn)
break}}
df <- read.delim(conn, ...)
return(df)}
Повторно отредактировано: Спасибо Мареку за дальнейшее улучшение вышеуказанной функции.