2015-02-06 2 views
1

이 질문은 매우 간단하고 어리석은 경우도 있지만 Google에서 답변을 찾을 수 없습니다. 나는이 명령을 사용하여 R에 .txt 파일을 읽으려고 해요 :R은 read.csv 명령에서 공간이 부족할 때 경고 메시지를 내 보냅니다.

data <- read.csv("perm2test.txt", sep="\t", header=FALSE, row.names=1, col.names=paste("V", seq_len(max(count.fields("perm2test.txt", sep="\t"))), sep=""), fill=TRUE) 

이유는 내가이 .txt 파일의 모든 라인은 관찰의 다른 번호를 가지고 있기 때문에 col.names 명령이 있습니다. 나는이 파일을 훨씬 더 작은 파일에서 테스트했으며 작동한다. 그러나 실제 데이터 세트 (48MB 만)에서 실행하면 작동하는지 확실하지 않습니다 ... 확실하지 않은 이유는 오류 메시지가 수신되지 않았기 때문입니다. 이 시점에서 24 시간 이상 "실행 중"이었습니다 (위의 read.csv 명령). 메모리가 부족하여 경고가 출력되지 않을 수 있습니까?

나는 주변을 둘러 보았고 크기를 줄이고 필요하지 않은 선을 제거하는 등의 기능이 있다고 말하는 사람들이 있음을 알고 있지만 솔직히이 파일이 그다지 크지 않다고 생각합니다. 불행히도 나는 파일의 모든 라인을 필요로한다. (실제로는 70 라인이지만, 어떤 라인은 100k 엔트리를 포함하고, 다른 라인은 100을 포함 할 수있다.) 어떤 아이디어가 발생하고 있습니까?

+1

(1) 나는 당신의'col.names' 인수가 다른 행이 관찰의 다른 번호를 가지고 함께 할 수있다 이해하지 않는다, (2)'fill = TRUE'는 데이터 프레임의 결과 크기를 크게 확장시킬 가능성이 있습니다 : 70 x 100k, (3) 관계없이,'read.table '에 대해서조차 너무 오래 실행됩니다. 멈추고 다른 것들을 시도해보십시오 (아마도'fread'). – joran

+0

'''read.csv()'''는 .csv 파일 용입니다. 대신''''read.table()'''을 찾고 있다고 생각합니다. 텍스트 파일의 샘플을 제공 할 수 있습니까? – rsoren

+1

이 데이터에 대해 어떤 분석을 원하십니까? 데이터 프레임이 최적이 아닐 수 있습니다. 아마도'readLines()'를 사용하고 아마도'strsplit()'을 사용하여 70 줄을 다른 방식으로 처리 할 것인가? – Andrie

답변

0

확실히 검증되지 않은하지만 당신에게 수정하는 몇 가지 코드를 제공해야합니다

datL <- readLines("perm2test.txt") # one line per group 
# may want to exclude some lines but question is unclear 
listL <- lapply(datL, function(L) read.delim(text=L, colCasses="numeric")) 
# This is a list of values by group 
dfL <- data.frame(vals = unlist(listL), 
# Now build a grouping vector that is associated with each bundle of values 
        groups= rep(LETTERS[1:length(listL)] , 
           sapply(listL, length)) 
# Might have been able to do that last maneuver with `stack`. 

library(lattice) 
bwplot(vals ~ groups, data=dfL) 
관련 문제