2013-05-20 5 views
0

여러 파일을로드하는 스크립트를 실행 중입니다. 로드 된 파일이 50 개가되면 "모든 연결이 사용 중입니다."라는 오류 메시지가 나타납니다.read.table 연결 닫기 R

연결을 닫아야한다고 생각했지만 다음과 같은 문제가 발생했습니다.

con = file(paste('/home/rstudio/userstats/',cuserid,'.tsv',sep="")) 
userstats_current = read.table(con, sep="\t", header=0, quote="", stringsAsFactors=F) 
close(con) 
Error in close.connection(con) : invalid connection 

내가 입력 그러나 다음 모든 것이 잘 작동하는 경우 :

con = file(paste('/home/rstudio/userstats/',cuserid,'.tsv',sep="")) 
close(con) 

read.table이 적용될 때 뭔가 연결에 발생합니까 그리고 어떻게 이러한 연결을 닫습니다 관리 할 수 ​​있습니까?

업데이트

감사합니다. 문제는 내가 잠시 후에 하나의 코어로도 foreach 루프를 실행할 때 모든 연결 오류가 계속 발생한다는 것입니다.

registerDoMC(2) 
matrix <- foreach(i=1:nrow(sample), .combine=rbind) %dopar% {....} 
+3

가 읽 번을 EOF (파일 끝) 자동으로 닫힙니 까? open 용 문서에는 "일반적으로 연결을 사용하는 함수는 연결이 열려 있지 않은 경우 연결을 연 후 다시 닫아서 연결 열기 호출을 명시 적으로 열어 두었습니다."라고 말합니다. – Frank

+0

명시 적으로 연결을 생성하는 대신, 파일 이름을'read.table'로 전달하지 않는 것이 어떻습니까? 일반적으로 R은 연결 자체를 닫을 정도로 똑똑합니다. –

+0

이 파일은 1000 개의 파일과 함께 작동하므로 문제가 다른 곳 (예 : RStudio)에있는 것 같습니다. 'x <- list(); for (i in 1 : 1000) {fn <- paste0 ("z", i); 쓰기 (rnorm (5), fn); f <- 파일 (fn); x [[i]] <- read.table (f)}' –

답변

2

파일이 존재하지 않을 때 read.table을 실행하면 오류가 발생했습니다. 디스크에 존재하지 않는 파일에 대한 여러 개의 read.table 요청시 파일 연결이 해제되지 않습니다 (파일이 존재하지 않을 때와 달리).

(file.exists (filename)) {read.table (filename)}이 문제를 해결하기 위해 문제가 해결 된 것 같습니다. 이 문제를 해결할 수 있도록 도와 주신 모든 분들께 감사드립니다. 당신이 연결 만 500 서버 오류를 얻기 위해 시도 할 때 일어날 수있는 URL() 명령

read.table(url("http://...."),....) 

를 통해 HTTP 호출을하면 오류의 비슷한 종류로 실행할 수 있습니다

0

. 이 경우 read.table은 연결을 제대로 닫지 않을 수 있습니다. 이런 종류의 많은 루프가 끝나면 'netstat -a'로 볼 수있는 http CLOSE_WAIT 소켓이 누적되어 '사용중인 모든 연결'오류가 발생합니다.

이에 대한 해결책이 스택 오버플로 문제에 설명되어있는 귀하의 URL 연결을 수행 할 수있는 RCurl 패키지를 사용하는 것입니다 :

스택 오버플로 : 아마 read data from internet