사용중인 소프트웨어는 다양한 줄 바꿈으로 구분 된 데이터 다음에 다양한 줄의 요약 정보가있는 로그 파일을 생성합니다. 요약 정보를 무시하고 데이터 프레임에 이러한 로그 파일의 데이터를 읽는 함수를 작성하려고합니다. 다음과 같은 기능이 작동되도록 요약 정보, 탭을 포함하지 않는다 : 탭으로 구분 된 구분 된 파일의 머리글 앞에 여분의 줄을 건너 뛰는 방법 R
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)}
편집 : 감사 마렉 위의 기능을 더욱 개선.
안전하게 연결을 닫기 위해'on.exit' 함수를 사용할 수 있습니다. 'conn = file (...)'바로 뒤에'on.exit (close (conn))'줄을 추가하십시오. 그런 다음 함수가 작업을 완료하면 (정상적으로 또는 오류가있는 경우) 연결이 닫힙니다. 그렇지 않으면'file'과'close' 사이에 오류가있을 때 연결이 열립니다. – Marek
고마워, 좋은 기술. 나는 그것을 업데이트했다. –